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

Python NumPy堆栈或将数组附加到数组,python,arrays,numpy,numpy-ndarray,valueerror,Python,Arrays,Numpy,Numpy Ndarray,Valueerror,我从NumPy开始 给定两个np.arrays、queu和new\u路径: 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

我从NumPy开始

给定两个
np.array
s、
queu
new\u路径

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)

但两者都在提高

除连接轴之外的所有输入数组维度必须完全匹配


我不懂NumPy哲学。我做错了什么?

我不完全清楚您是如何设置
数组的,但从声音上看,
np.vstack
确实应该满足您的要求:

In [30]: queue = np.array([0, 0, 0, 1]).reshape(2, 2)

In [31]: queue
Out[31]:
array([[0, 0],
       [0, 1]])

In [32]: new_path = np.array([0, 0, 1, 0, 2, 0]).reshape(3, 2)

In [33]: new_path
Out[33]:
array([[0, 0],
       [1, 0],
       [2, 0]])

In [35]: np.vstack((queue, new_path))
Out[35]:
array([[0, 0],
       [0, 1],
       [0, 0],
       [1, 0],
       [2, 0]])

我并不完全清楚您是如何设置
数组的,但从它的声音来看,
np.vstack
确实应该满足您的要求:

In [30]: queue = np.array([0, 0, 0, 1]).reshape(2, 2)

In [31]: queue
Out[31]:
array([[0, 0],
       [0, 1]])

In [32]: new_path = np.array([0, 0, 1, 0, 2, 0]).reshape(3, 2)

In [33]: new_path
Out[33]:
array([[0, 0],
       [1, 0],
       [2, 0]])

In [35]: np.vstack((queue, new_path))
Out[35]:
array([[0, 0],
       [0, 1],
       [0, 0],
       [1, 0],
       [2, 0]])
你需要的是

你需要的是

您已经定义了两个数组,形状分别为(1,2,2)和(1,3,2)。如果您对这些形状感到困惑,您需要重新阅读一些基本的
numpy
简介

hstack
vstack
append
所有调用
连接
。使用3d阵列只会混淆问题

在第二个轴上进行连接,一个轴的尺寸为2,另一个轴的尺寸为3,可以产生(1,5,2)阵列。(这相当于
hstack

尝试在轴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]])]
或者一个对象数据类型数组-但这更高级
numpy

您已经定义了两个数组,形状分别为(1,2,2)和(1,3,2)。如果您对这些形状感到困惑,您需要重新阅读一些基本的
numpy
简介

hstack
vstack
append
所有调用
连接
。使用3d阵列只会混淆问题

在第二个轴上进行连接,一个轴的尺寸为2,另一个轴的尺寸为3,可以产生(1,5,2)阵列。(这相当于
hstack

尝试在轴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]])]

或者一个对象数据类型数组-但这更高级
numpy

您想要的结果不是一个矩阵,因为矩阵需要在所有轴上有相等数量的元素(例如3x2-3行,每行正好有2个元素)好的,我明白了。我试图列举2D矩阵上所有可能的方法。我会改变我的方法。你想要的结果不是矩阵,因为矩阵需要在所有轴上有相等数量的元素(例如3x2-3行,每行正好有2个元素),好的,我理解。我试图列举2D矩阵上所有可能的方法。我会改变我的方法。
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]])]