這不是太大的問題的好奇心。爲什麼在numpy.core.numeric._typelessdata 2個np.int64s(爲什麼不numpy.int64 numpy.int64?)
在我的64位Linux解釋我可以執行
In [10]: np.int64 == np.int64
Out[10]: True
In [11]: np.int64 is np.int64
Out[11]: True
太好了,正是我所期望的。 但是我發現numpy.core.numeric模塊
In [19]: from numpy.core.numeric import _typelessdata
In [20]: _typelessdata
Out[20]: [numpy.int64, numpy.float64, numpy.complex128, numpy.int64]
古怪的這種怪異的財產爲什麼numpy.int64在那裏兩次?讓我們調查。
In [23]: _typelessdata[0] is _typelessdata[-1]
Out[23]: False
In [24]: _typelessdata[0] == _typelessdata[-1]
Out[24]: False
In [25]: id(_typelessdata[-1])
Out[25]: 139990931572128
In [26]: id(_typelessdata[0])
Out[26]: 139990931572544
In [27]: _typelessdata[-1]
Out[27]: numpy.int64
In [28]: _typelessdata[0]
Out[28]: numpy.int64
哇他們是不同的。這裏發生了什麼?爲什麼有兩個np.int64?
所以我遇到這個問題的原因是因爲我一直希望打印出我的numpy字符串的dtype。我無法找到它的標誌,所以我最終稍微修改了array_repr來採取'force_dtype = False標誌'。然後我改變了檢查'如果skipdtype而不是force_dtype:'。是否有原因爲什麼本地類型不應該在字符串表示中?在我的系統上,int64與longlong是否真的不同?爲什麼是repr(np.longlong)=「」開頭? –
Erotemic
2015-02-11 20:28:22
我猜想,從包含本機類型的數組的字符串表示中省略'dtype'可能只是一種與本機Python標量表示方式一致的樣式選擇。我想不出你的系統上的'np.int64'和'np.longlong'之間有什麼重要區別,但是正如Joe所說的,在另一個系統上,C編譯器可能會將long long定義爲比64bits更寬的東西,所以這兩種類型可能並不總是完全可以互換的。 – 2015-02-11 20:43:35
推測,'repr(np.longlong)==「」'反映了(至少在你的系統上)這兩種類型實際上是相同的事實。 –
2015-02-11 20:46:51