使用Numpy进行行缩放

Mon*_*key 1 python numpy

我有一个维数为MxN的数组H和一个维数为M的数组A. 我想用数组A缩放H行.我这样做,利用Numpy的元素行为

H = numpy.swapaxes(H, 0, 1)
H /= A
H = numpy.swapaxes(H, 0, 1)
Run Code Online (Sandbox Code Playgroud)

它可以工作,但两个swapaxes操作不是很优雅,我觉得有一种更优雅和更简洁的方式来实现结果,而不创造临时性.你能告诉我怎么 ?

DSM*_*DSM 5

我想你可以简单地使用H/A[:,None]:

In [71]: (H.swapaxes(0, 1) / A).swapaxes(0, 1)
Out[71]: 
array([[  8.91065496e-01,  -1.30548362e-01,   1.70357901e+00],
       [  5.06027691e-02,   3.59913305e-01,  -4.27484490e-03],
       [  4.72868136e-01,   2.04351398e+00,   2.67527572e+00],
       [  7.87239835e+00,  -2.13484271e+02,  -2.44764975e+02]])

In [72]: H/A[:,None]
Out[72]: 
array([[  8.91065496e-01,  -1.30548362e-01,   1.70357901e+00],
       [  5.06027691e-02,   3.59913305e-01,  -4.27484490e-03],
       [  4.72868136e-01,   2.04351398e+00,   2.67527572e+00],
       [  7.87239835e+00,  -2.13484271e+02,  -2.44764975e+02]])
Run Code Online (Sandbox Code Playgroud)

因为None(或newaxis)A在维度上延伸(示例链接):

In [73]: A
Out[73]: array([ 1.1845468 ,  1.30376536, -0.44912446,  0.04675434])

In [74]: A[:,None]
Out[74]: 
array([[ 1.1845468 ],
       [ 1.30376536],
       [-0.44912446],
       [ 0.04675434]])
Run Code Online (Sandbox Code Playgroud)