2013-02-01 36 views
1

我有一个尺寸为MxN的数组H和一个尺寸为M的数组A.我想用扩展阵列A^h行我做这种方式,采取的NumPy的使用Numpy按行进行缩放

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

它的工作原理的元素方面的行为优势,但两个swapaxes操作是不是很优雅,我觉得有一种更优雅和更简洁的方式来实现结果,而不需要创建临时对象。你能告诉我怎么 ?

+0

的可能重复的[如何正常化在python 2维阵列numpy的更简洁?](http://stackoverflow.com/questions/8904694/how-to-normalize-a -2维-numpy的阵列式-蟒-不太详细) – LondonRob

回答

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]]) 

因为None(或newaxis)延伸A在尺寸(example link)

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]]) 
2

你只需要重塑A,使其广泛的正常投:

A = A.reshape((-1, 1)) 

这样:

In [21]: M 
Out[21]: 
array([[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17], 
     [18, 19, 20]]) 


In [22]: A 
Out[22]: array([1, 2, 3, 4, 5, 6, 7]) 


In [23]: M/A.reshape((-1, 1)) 
Out[23]: 
array([[0, 1, 2], 
     [1, 2, 2], 
     [2, 2, 2], 
     [2, 2, 2], 
     [2, 2, 2], 
     [2, 2, 2], 
     [2, 2, 2]])