我正在尝试将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
关于如何做到这一点的任何想法?
答案 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
大到足以接收数组的元素,并复制值。