Skip to main content
 首页 » 编程设计

python之使用 Numpy 按行缩放

2025年05月04日12zdz8207

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

H = numpy.swapaxes(H, 0, 1) 
H /= A 
H = numpy.swapaxes(H, 0, 1) 

可以,但是两个 swapaxes 操作不是很优雅,我觉得有一种更优雅和简洁的方法来实现结果,而不需要创建临时对象。你能告诉我怎么做吗?

请您参考如下方法:

我想你可以简单地使用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]]) 

因为 None(或 newaxis)在维度 (example link) 中扩展了 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]])