pce*_*con 4 python numpy normalization multidimensional-array
有一种简单的方法来规范化ndarray(每个值在0.0,1.0之间)?
例如,我有一个矩阵,如:
a = [[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]]
Run Code Online (Sandbox Code Playgroud)
到现在为止,我正在获得最大值
max(max(p[1:]) for p in a)
a / p
Run Code Online (Sandbox Code Playgroud)
此外我认为numpy可能在一行中有一个方法,如果我的数据是这样的,这不起作用:
b = [[-1., -2., -3.],
[-4., -5., -6.],
[-7., -8., 0.]]
Run Code Online (Sandbox Code Playgroud)
这给出了由零分割引起的错误.
我想要做的是最大值变为1.所以,我想做一个翻译使得9变为1(在正例中将值除以最大值)和0(当它是最大值)变为1(使用翻译方法,例如),我知道这很热,但我想numpy可能有一个解决方案,在它的包中做这件事.
我怎么能用numpy很好地完成这个?
先感谢您.
在一般情况下,你可以使用np.ptp1(峰到峰)np.min来做到这一点:
new_arr = (a - a.min())/np.ptp(a)
Run Code Online (Sandbox Code Playgroud)
例:
>>> a = np.array([[-1., 0, 1], [0, 2, 1]])
>>> np.ptp(a)
3.0
>>> a
array([[-1., 0., 1.],
[ 0., 2., 1.]])
>>> (a - a.min())/np.ptp(a)
array([[ 0. , 0.33333333, 0.66666667],
[ 0.33333333, 1. , 0.66666667]])
Run Code Online (Sandbox Code Playgroud)
当然,如果a完全由零组成,这仍然会产生错误- 但在这种情况下问题并不好.
1 IIRC,np.ptp电话np.max和np.min.如果性能非常关键,那么您可以创建自己的ptp并保存np.min到临时变量,这样就不会计算两次.