如果你正在使用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