Numpy:将数组元素设置为另一个数组

时间:2016-06-02 23:03:27

标签: python arrays numpy

我正在尝试将Numpy数组的元素设置为另一个Numpy数组。我不确定如何做到这一点,因为我每次尝试都会ValueError: setting an array element with a sequence.

我知道Python的list可以实现这一点,因为我可以将新数组附加到列表中并且它可以工作。

这是我正在尝试做的一个例子:

import numpy as np

finalArray = np.zeros(3)
finalList = []

a = np.arange(128).reshape(32,4)
b = np.arange(124).reshape(31,4)
c = np.arange(120).reshape(30,4)

# This works
finalList.append(a)
finalList.append(b)
finalList.append(c)

# This doesn't work
finalArray[0] = a
finalArray[1] = b
finalArray[2] = c

关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:1)

Numpy数组不能用任意类型填充。它们更像是C或Java的数组。要创建二维数组,请将二维列表输入np.array函数。例如,

x = np.array([[0,0,0],[0,0,0],[0,0,0]])

创建一个用零填充的3x3二维数组。

答案 1 :(得分:1)

我认为您正在寻找numpy.concatenate

In [11]: np.concatenate((a, b, c))
Out[11]:
array([[  0,   1,   2,   3],
       [  4,   5,   6,   7],
       [  8,   9,  10,  11],
       [ 12,  13,  14,  15],
       [ 16,  17,  18,  19],
       ...

这会创建一个93 x 4 numpy数组:

In [12]: np.concatenate((a, b, c)).shape
Out[12]: (93, 4)

答案 2 :(得分:1)

如果

,它会起作用
finalArray = np.zeros(3, dtype=object)
finalArray[0] = a

然后finalArray将对象点作为列表。

但我犹豫不决,因为这个功能被初学者滥用或滥用。

https://stackoverflow.com/a/37597524/901925 - 我对另一个关于数组数组深层副本的问题的回答。

考虑到数组的维度,concatenate答案是唯一有意义的选择。

concatenate的变体是

finalArray = np.zeros((93,4),a.dtype)
finalArray[:32,:] = a
etc

换句话说,使finalArray大到足以接收数组的元素,并复制值。