如何将2D数组连接到每个3D数组中?

时间:2019-04-27 10:37:22

标签: python numpy matrix concatenation

我试图将形状为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循环来做到这一点,但我正在寻找更紧凑,更优化的解决方案。

2 个答案:

答案 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)

https://ideone.com/ypDpyT