NumPy 堆栈或将数组附加到数组

2024-04-03

我从 NumPy 开始。

给定两个np.arrays, queu and new_path:

queu = [ [[0 0]
          [0 1]]
       ]

new_path = [ [[0 0]
              [1 0]
              [2 0]]
           ]

我的目标是得到以下queu:

queu = [ [[0 0]
          [0 1]]
         [[0 0]
          [1 0]
          [2 0]]
       ]

我试过了:

np.append(queu, new_path, 0)

and

np.vstack((queu, new_path))

但两者都在提高

除串联轴外的所有输入数组维度都必须完全匹配

我没有理解 NumPy 的哲学。我究竟做错了什么?


In [741]: queu = np.array([[[0,0],[0,1]]])
In [742]: new_path = np.array([[[0,0],[1,0],[2,0]]])
In [743]: queu
Out[743]: 
array([[[0, 0],
        [0, 1]]])
In [744]: queu.shape
Out[744]: (1, 2, 2)
In [745]: new_path
Out[745]: 
array([[[0, 0],
        [1, 0],
        [2, 0]]])
In [746]: new_path.shape
Out[746]: (1, 3, 2)

您定义了 2 个数组,形状为 (1,2,2) 和 (1,3,2)。如果您对这些形状感到困惑,您需要重新阅读一些基本知识numpy介绍。

hstack, vstack and append所有呼叫concatenate。对于 3d 数组,使用它们只会让事情变得混乱。

连接第二个轴(其中一个轴的大小为 2,另一个轴的大小为 3)有效,生成一个 (1,5,2) 数组。 (这相当于hstack)

In [747]: np.concatenate((queu, new_path),axis=1)
Out[747]: 
array([[[0, 0],
        [0, 1],
        [0, 0],
        [1, 0],
        [2, 0]]])

尝试加入轴 0 (vstack) 会产生错误:

In [748]: np.concatenate((queu, new_path),axis=0)
....
ValueError: all the input array dimensions except for the concatenation axis must match exactly

连接轴为 0,但轴 1 的尺寸不同。因此出现了错误。

您的目标不是有效的 numpy 数组。您可以将它们收集在一个列表中:

In [759]: alist=[queu[0], new_path[0]]
In [760]: alist
Out[760]: 
[array([[0, 0],
        [0, 1]]), 
 array([[0, 0],
        [1, 0],
        [2, 0]])]

或者一个对象 dtype 数组 - 但这更高级numpy.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NumPy 堆栈或将数组附加到数组 的相关文章

随机推荐