gpt4 book ai didi

python - 如何将一个 N 长度的 numpy 数组附加到另​​一个 N 维数组?

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:27 25 4
gpt4 key购买 nike

情况

我原以为这很容易 - 但事实证明有一些限制。我有一个空数组,此时它是空的且维度未知。

mainArray = np.array([])

稍后,我想将数组附加到我的主数组,它们具有不同的长度。

我试过了

*请假设我尝试追加的所有数组都是 np.zeros(n)

的结果

我已经尝试过 np.append() 但这并没有保持正确的维度(假设我想要一个线性数组)。

我试过 np.concatenate() 但是,这个错误

TypeError: only length-1 arrays can be converted to Python scalars

暗示我不能连接到一个空数组...?

我已经尝试了 np.vstack() 但是得到了

ValueError: all the input array dimensions except for the concatenation axis must match exactly

...这意味着我不能添加不同长度的数组?

问题

如何将 n 长数组附加到空的 n 维数组?

更新

这是一个输出示例:

[[0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0]]

其中长度为 3 是一个变量

最佳答案

您的起始数组不为空(好的,它确实有 0 个元素),并且不是未知维度。它具有明确定义的形状和维数 (1d)。

In [704]: a=np.array([])
In [705]: a.shape
Out[705]: (0,)
In [706]: a.ndim
Out[706]: 1

一些与 a 一起使用的连接示例

In [708]: np.concatenate((a,a,a,a)).shape
Out[708]: (0,)
In [709]: np.concatenate((a,np.zeros(3))).shape
Out[709]: (3,)

作为一般规则,不要从“空”数组开始并尝试重复追加到它。这是一种 list 方法,对数组效率不高。并且由于维度问题,可能无法正常工作。

重复追加的正确方法是这样的:

alist = []
for i in range(3):
alist.append([1,2,3])
np.array(alist)

子列表的长度是否都相同?在你的最后一个例子中,它们不同,数组版本是 dtype=object。它是 1d,带有指向内存中其他位置列表的指针 - 即美化列表。

In [710]: np.array([[0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0]])
Out[710]: array([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0]], dtype=object)

这与您通过 vstack 获得的 3 个相同长度数组的结果截然不同。

我认为您需要更多地练习基本的数组构造、shape 和维度的含义。标题本身显示出一些困惑 - array of length N array of N-dimensions。这些是非常不同的描述。

============

concatenate 的基本要点是 (n1,m) 数组可以与 (n2,m) 数组连接到生成一个 (n1+n2,m) 数组。其他维度也类似。如果一个数组是 1d (m,),则需要将其扩展为 (1,m) 以执行此串联。 vstack 为您进行这种扩展。

这意味着 (0,) 形状数组可以与其他一维数组水平连接,但不能参与二维垂直连接,除非使用 (n2,0) 数组。维度的大小可能为 0,但这很少有用,因为它不包含任何数据。

关于python - 如何将一个 N 长度的 numpy 数组附加到另​​一个 N 维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40113072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com