例如,我有一个定义为A的2D numpy数组。我想根据以下语句将其转换为另一个2D数组:
B = A - mean(A), the mean by the second axis
C = B / mean(A)
一个例子:
>>> import numpy as np
>>> A = np.array([[1, 2, 3], [4, 6, 8]])
>>> A
array([[1, 2, 3],
[4, 6, 8]])
>>> M = np.mean(A, axis=1)
>>> M
array([ 2., 6.])
>>> B = ... # ???
>>> B
array([[-1., 0., 1.],
[-2., 0., 2.]])
>>> C = ... # ???
>>> C
array([[-0.5, 0., 0.5],
[-0.33333333, 0., 0.33333333]])
答案 0 :(得分:2)
令人讨厌的是,numpy.mean(axis=...)
为您提供了一个数组,其中相关轴已被删除而不是设置为大小1.因此,当您将此应用于轴= 1的2x3数组时,您得到(rank-1)大小为2的数组,而不是你真正想要的2x1数组。
您可以通过向keepdims
提供numpy.mean
参数来解决此问题:
M = np.mean(A, axis=1, keepdims=True)
如果不存在,则可以选择使用reshape
。
答案 1 :(得分:2)
Gareht McCaughan的解决方案更优雅,但在keepdims
不存在的情况下,您可以向M
添加新轴:
B = A - M[:, None]
(M [:,None] .shape是(2,1),所以广播发生了)
答案 2 :(得分:1)
您可以使用subtract
中的divide
和numpy
功能。解决你的例子:
import numpy as np
A = np.array([[1, 2, 3], [4, 6, 8]])
M = np.mean(A, axis=1)
B = np.subtract(A.T,M).T
C = np.divide(B.T,M).T
print(B)
print(C)
,结果:
[[-1. 0. 1.]
[-2. 0. 2.]]
[[-0.5 0. 0.5 ]
[-0.33333333 0. 0.33333333]]