我从NumPy开始。
鉴于两个QT_INIT_RESOURCE
,np.array
和queu
:
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)
但两人都在提高
除了连接轴之外的所有输入数组维度必须完全匹配
我没有得到NumPy哲学。我做错了什么?
答案 0 :(得分:1)
您需要的是np.hstack
In [73]: queu = np.array([[[0, 0],
[0, 1]]
])
In [74]: queu.shape
Out[74]: (1, 2, 2)
In [75]: new_path = np.array([ [[0, 0],
[1, 0],
[2, 0]]
])
In [76]: new_path.shape
Out[76]: (1, 3, 2)
In [81]: np.hstack((queu, new_path))
Out[81]:
array([[[0, 0],
[0, 1],
[0, 0],
[1, 0],
[2, 0]]])
答案 1 :(得分:1)
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
和append
都致电concatenate
。使用它们的3d数组只会让事情变得混乱。
连接第二个轴,其中一个是2,一个是另一个,可以生成(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
。
答案 2 :(得分:0)
我并不完全清楚你是如何设置array
的,但从它的声音来看,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]])