我试图将形状为A
的相同2D数组(n, m)
连接到形状为B
的3D数组(N, n, k)
的每个2D数组中。
我尝试了堆栈并进行了连接,但是由于只有一个尺寸匹配而无法使用。我尝试了以下示例来测试这个想法:
a = np.array([[1],[2],[3]])
b = np.ones((2,3,4))
np.hstack((a,b))
ValueError: all the input arrays must have same number of dimensions
我期望的是以下结果:
array([[[1., 1., 1., 1., 1.],
[2., 1., 1., 1., 1.],
[3., 1., 1., 1., 1.]],
[[1., 1., 1., 1., 1.],
[2., 1., 1., 1., 1.],
[3., 1., 1., 1., 1.]])
我知道可以使用for循环来做到这一点,但我正在寻找更紧凑,更优化的解决方案。
答案 0 :(得分:0)
我知道这有点混乱,但是可以完成工作
a = np.array([[1],[2],[3]])
b = np.ones((2,3,4))
a=np.expand_dims(a,axis=0)
a=np.concatenate((a,a),axis=0)
np.dstack((a,b))
答案 1 :(得分:0)
您当前有一个(3, 1)
数组,您希望它像广播到(2, 3, 4)
一样放在(2, 3, 1)
数组的前面。这是您必须自己进行broadcasting的情况之一。如果您使用broadcast_to
,则将获得一个对象,该对象不复制原始数据,并且至少适合复制到新数组中:
c = np.broadcast_to(a, b.shape[0:1] + a.shape)
result = np.concatenate((c, b), axis=2)