NumPy在創建數組時非常有用。如果numpy.array
的第一個參數具有__getitem__
和__len__
方法,則基於它們可能是有效序列來使用它們。防止numpy創建多維數組
不幸的是我想創建一個包含dtype=object
而不是NumPy「有幫助」的數組。
分解爲一個最小的例子中,類將是這樣的:
import numpy as np
class Test(object):
def __init__(self, iterable):
self.data = iterable
def __getitem__(self, idx):
return self.data[idx]
def __len__(self):
return len(self.data)
def __repr__(self):
return '{}({})'.format(self.__class__.__name__, self.data)
,如果「iterables」有不同的長度,一切都很好,我得到正是我想要的結果:
>>> np.array([Test([1,2,3]), Test([3,2])], dtype=object)
array([Test([1, 2, 3]), Test([3, 2])], dtype=object)
但NumPy的創建一個多維數組,如果這些發生在具有相同的長度:
>>> np.array([Test([1,2,3]), Test([3,2,1])], dtype=object)
array([[1, 2, 3],
[3, 2, 1]], dtype=object)
不幸的是,只有ndmin
的論點,所以我想知道是否有一種方法來執行ndmax
或以某種方式防止NumPy將自定義類解釋爲另一維(不刪除__len__
或__getitem__
)?
我試圖尋找類似的問題,但我還沒有發現任何。也許我只是搜索錯誤的短語。如果您有任何提及較早的問題,那就太棒了。謝謝你的回答,但我實際上並沒有尋找解決方法。我更關心的是如何在事先不知道確切長度的情況下定義數組的最大深度(維),或者禁用numpy將自定義類實例解釋爲序列。 – MSeifert
通過將您的類更改爲子類'dict',我可以阻止它在您的實例上迭代。這表明'np.array'正在測試多於'__getitem__'。但是我一直無法找到執行這種檢查的代碼。 – hpaulj
http://stackoverflow.com/questions/36663919/override-a-dict-with-numpy-support - 與同一問題的鬥爭;控制'np.array'是否迭代你的自定義類。同樣的解決方法。 – hpaulj