【发布时间】:2019-12-29 10:59:55
【问题描述】:
我必须矩阵:
a = np.array([[6],[3],[4]])
b = np.array([1,10])
当我这样做时:
c = a * b
c 看起来像这样:
[ 6, 60]
[ 3, 30]
[ 4, 40]
这很好。 现在,假设我向 a 添加了一列(为了示例,它是一个相同的列。但它必须是):
a = np.array([[6,6],[3,3],[4,4]])
b 保持不变。
我想要的结果是 2 个相同的 c 副本(因为列相同),沿新轴堆叠:
new_c.shape == [3,2,2]
如果你做new_c[:,:,0] 或new_c[:,:,1] 你会得到原始的c。
我尝试使用 np.expand_dims 向 a 和 b 添加新轴,但没有帮助。
【问题讨论】:
-
第一种情况 a (3,1) * (2,) => (3,2)。第二,(3,2)*(2,)=>(3,2)*(1,2)=>(3,2)。你想要 (3,2,1)*(1,1,2)=(3,2,2)。
a[:,:,None]应该可以解决问题。 -
或者它的 (3,1,n)*(1,2,1)>(3,2n) a[:,None,:]*b[None,2,None]
标签: python numpy array-broadcasting