如何制作一个可变行大小的多维numpy数组?

2024-03-28 21:05:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个二维numpy数组,其中每行有不同数量的元素。

尝试

cells = numpy.array([[0,1,2,3], [2,3,4]])

出现错误

ValueError: setting an array element with a sequence.

Tags: numpyan元素数量错误with数组element
3条回答

我们现在离问这个问题已经快7年了,还有你的代码

cells = numpy.array([[0,1,2,3], [2,3,4]])

在numpy 1.12.0和python 3.5中执行,不会产生任何错误,并且 cells包含:

array([[0, 1, 2, 3], [2, 3, 4]], dtype=object)

您可以将cells元素作为cells[0][2] # (=2)访问。

如果您想在新元素(即数组)可用时动态构建numpy数组列表,那么可以使用append

d = []                 # initialize an empty list
a = np.arange(3)       # array([0, 1, 2])
d.append(a)            # [array([0, 1, 2])]
b = np.arange(3,-1,-1) #array([3, 2, 1, 0])
d.append(b)            #[array([0, 1, 2]), array([3, 2, 1, 0])]

虽然Numpy知道任意对象的数组,但它对具有固定维度的同构数组进行了优化。如果您真的需要数组,最好使用嵌套列表。但是,根据数据的预期用途,不同的数据结构可能更好,例如,如果有一些无效的数据点,则使用屏蔽数组。

如果您真的需要灵活的Numpy数组,请使用以下方法:

numpy.array([[0,1,2,3], [2,3,4]], dtype=object)

然而,这将创建一个一维数组来存储对列表的引用,这意味着您将失去Numpy的大部分好处(向量处理、局部性、切片等)。

这在Numpy中不太受支持(根据定义,几乎在任何地方,“二维数组”的所有行都是等长的)。Numpy数组的Python列表可能是一个很好的解决方案,因为这样您就可以获得Numpy的优点,在这里您可以使用它们:

cells = [numpy.array(a) for a in [[0,1,2,3], [2,3,4]]]

相关问题 更多 >