您可以使用
np.repeat:
r = np.concatenate((a, b.reshape(1, 1, -1).repeat(a.shape[0], axis=0)), axis=1)
它的作用是,首先调整
b数组的形状以匹配的尺寸
a,然后根据
a的第一个轴根据需要重复其值多次:
b3D = b.reshape(1, 1, -1).repeat(a.shape[0], axis=0)array([[[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]]])b3D.shape(5, 1, 3)
然后将此中间结果与
a-
r = np.concatenate((a, b3d), axis=0)r.shape(5, 5, 3)
这与您当前的答案有所不同,主要是因为值的重复不是硬编码的(即,重复处理了它)。
如果您需要针对其他数量的尺寸(而不是3D阵列)处理此问题,则需要进行一些更改(主要是删除的硬编码重塑形状
b)。
时机
a = np.random.randn(100, 99, 100)b = np.random.randn(100)# Tai's answer%timeit np.insert(a, 4, b, axis=1)100 loops, best of 3: 3.7 ms per loop# Divakar's answer%%timeit b3D = np.broadcast_to(b,(a.shape[0],1,len(b)))np.concatenate((a,b3D),axis=1)100 loops, best of 3: 3.67 ms per loop# solution in this post%timeit np.concatenate((a, b.reshape(1, 1, -1).repeat(a.shape[0], axis=0)), axis=1)100 loops, best of 3: 3.62 ms per loop
这些都是极具竞争力的解决方案。但是,请注意性能取决于实际数据,因此请确保先进行测试!



