使用广播根据向量中的元素乘以矩阵行?

时间:2013-10-04 12:37:48

标签: python numpy

假设我有一个矩阵

x=array([[ 0.,  0.,  0.],
       [ 0.,  0.,  1.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  1.],
       [ 1.,  0.,  0.],
       [ 1.,  0.,  1.],
       [ 1.,  1.,  0.],
       [ 1.,  1.,  1.]])

我想要

array([[ 0.,  0.,  0.],
       [ 0.,  0.,  2.],
       [ 0.,  3.,  0.],
       [ 0.,  4.,  4.],
       [ 5.,  0.,  0.],
       [ 6.,  0.,  6.],
       [ 7.,  7.,  0.],
       [ 8.,  8.,  8.]])

如何在xrange(1,9)之间编写单行表达式?列的相同操作的代码是什么?

1 个答案:

答案 0 :(得分:4)

x * np.arange(1, 9).reshape(-1, 1)

x * arange(1, 9)[:, np.newaxis]

两种形式都在arange(1, 9)之外创建一个列向量,它沿着x的y轴很好地广播。

“列的相同操作”只是上述的转置,即跳过reshape操作:

x * arange(1, 4)