【问题标题】:Normalise elements by row in a Numpy array在 Numpy 数组中按行规范化元素
【发布时间】:2017-05-03 08:20:46
【问题描述】:

我有以下 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。)

每行中的元素数量可以变化。

是否有一种通用情况可以处理任意数量的元素而不使用循环?

【问题讨论】:

    标签: python arrays numpy vectorization


    【解决方案1】:

    这是利用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2016-05-16
      • 1970-01-01
      • 2017-11-03
      相关资源
      最近更新 更多