如果你正在使用numpy,numpy對象數組是「內存中連續的指針數組」。
然而,他們擊敗numpy的陣列通常的目的,而且往往被清盤一個不好回答手頭上的問題......
(同一類型的連續內存 - >對整個快速計算數組...對象數組不允許這樣做,因爲它們只是指向python對象的指針數組)。
然而,np.empty((m,n), dtype=np.object)
做你想要的。
E.g.
x = np.empty((3,4), dtype=np.object)
print x
x[2,3] = range(5)
x[1,2] = 2
x[1,3] = (item*2 for item in xrange(10))
print x
其中產量:
Initial array:
[[None None None None]
[None None None None]
[None None None None]]
Modified array:
[[None None None None]
[None None 2 <generator object <genexpr> at 0x8700d9c>]
[None None None [0, 1, 2, 3, 4]]]
要知道,這將是非常緩慢,而且要少得多的內存比「正常」 numpy的陣列,高效! (也就是說,與(numpy,而不是python)float相比,即使一個None
對象也佔用了相當多的內存空間,並且存儲在數組中的指針會產生額外的開銷。大對象數組將使用大量內存! )
但是,如果您所需要的實際上是一個多維列表,而且您不會經常附加到它或更改其大小,那麼它們可能很方便。它們本質上等同於matlab的單元陣列,雖然python中的這種數據結構的需求較少(python有列表),但有時它很方便!
正如之前所說,這不是你想要做的那種考慮。弄清楚你想做什麼(並讓我們知道),我們將幫助你爲它定義數據結構。但是關於Python的一個很棒的事情是,你不必擔心C中的所有低級內存的東西。 – katrielalex 2011-02-05 21:32:52