python - 按行标准化 Numpy 数组中的元素

标签 python arrays numpy vectorization

我有以下 numpy 矩阵:

A = [[a,b,c],
     [d,e,f],
     ...]

我需要沿着行(最里面的维度)进行归零归一化。所以答案应该是:

B = [[a-(a+b+c)/3, b-(a+b+c)/3, c-(a+b+c)/3],
     [d-(d+e+f)/3, e-(d+e+f)/3, f-(d+e+f)/3],
     ...]

(就像计算每行的平均值并从该行中的每个元素中减去 if 。)

每行中的元素数量可以不同。

是否有一种一般情况可以处理任意数量的元素而无需诉诸循环?

最佳答案

这是一种利用 broadcasting 的方法-

A - A.mean(axis=1,keepdims=1)

示例运行 -

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

In [24]: A - A.mean(axis=1,keepdims=1)
Out[24]: 
array([[-4.        ,  1.        ,  3.        ],
       [-0.33333333, -2.33333333,  2.66666667],
       [ 2.        , -2.        ,  0.        ],
       [ 1.66666667,  1.66666667, -3.33333333]])

In [25]: 1 - (1+6+8)/3.0
Out[25]: -4.0

In [26]: 6 - (1+6+8)/3.0
Out[26]: 1.0

In [28]: 8 - (1+6+8)/3.0
Out[28]: 3.0

关于python - 按行标准化 Numpy 数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43754805/

相关文章:

python - 递归计算表达式python

javascript - 如何获取数组中所有出现的相同值的索引?

python - 从 python 中查找 python 头路径?

python - 在没有循环的情况下将 "nan"添加到 numpy 数组 20 次

python - 使用 scipy.interpolate.RegularGridInterpolator 出现错误 "There are 100 point arrays, but values has 2 dimensions"

python - 在scoped_session中跨进程边界

python - 获取类型错误 : "POST data should be bytes or an iterable of bytes. It cannot be str." while following simply online example

python - 运行时警告: invalid value encountered in power

php - 从数组中删除元素

java - java中的随机数数组作为对象