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

sulc1iza  于 2023-08-05  发布在  其他
关注(0)|答案(4)|浏览(107)

我试图将一个Numpy数组的元素设置为另一个Numpy数组。我不知道如何做到这一点,因为每次我尝试我得到ValueError: setting an array element with a sequence.
我知道这在Python的list中是可能的,因为我可以将新数组追加到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

字符串
有什么办法吗?

wribegjk

wribegjk1#

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

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

字符串
创建一个3x3的二维数组,填充零。

zbdgwd5y

zbdgwd5y2#

我想你在找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)

ui7jx7zq

ui7jx7zq3#

它会工作如果

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足够大以接收数组的元素并复制值。

bvk5enib

bvk5enib4#

我完全理解你的问题。使用numpy数组作为对象的存储有时会更方便。例如,matplotlib使用numpy数组来存储轴的网格,所以它本身并不是一个坏的做法,但应该稀疏地使用。
问题是它不允许将iterable设置为成员。
到目前为止,我的方法是:

from argparse import Namespace
finalArray = np.empty(3, dtype=np.object_)
finalArray[0] = Namespace(arr=a)

字符串
要访问它,请执行以下操作:

finalArray[0].arr


让我知道,如果有一个黑客直接做它没有命名空间或独裁。;)

相关问题