我最近遇到了使用例如創建Numpy對象數組時遇到的問題。Numpy對象數組
a = np.array([c], dtype=np.object)
其中c是一些複雜的類的實例,在某些情況下與NumPy試圖訪問類的一些方法。但是,這樣做:
a = np.empty((1,), dtype=np.object)
a[0] = c
解決了這個問題。我很好奇內部這兩者之間有什麼不同。爲什麼在第一種情況下,Numpy可能會嘗試訪問c
的某些屬性或方法?
編輯:爲了記錄在案,這裏是示例代碼演示問題:
import numpy as np
class Thing(object):
def __getitem__(self, item):
print "in getitem"
def __len__(self):
return 1
a = np.array([Thing()], dtype='object')
此打印出getitem
兩次。基本上,如果__len__
出現在課堂上,那麼這是人們可能遇到意想不到的行爲。
沒有關係的,但是爲什麼'np.object'並不僅僅是'object'? – JBernardo
這兩者是等價的(''object == np.object''返回''True''),所以這與我所看到的問題無關。 – astrofrog
@astrofog這就是爲什麼我問,並說它不相關。 – JBernardo