【问题标题】:How to row-normalize a feature matrix? Broadcasting error如何对特征矩阵进行行归一化?广播错误
【发布时间】:2021-08-12 00:25:04
【问题描述】:

我有一个想要行归一化的特征矩阵。

这是我根据 min-max 缩放所做的,但我遇到了错误。谁能帮我解决这个错误。

a = np.random.randint(10, size=(4,5))
s=a.max(axis=1) - a.min(axis=1)
np.amax(a,axis=1)
print(s)

(a - a.min(axis=1))/(a.max(axis=1) - a.min(axis=1))\

>>[7 6 4 5]
      4 print(s)
      5 
----> 6 (a - a.min(axis=1))/(a.max(axis=1) - a.min(axis=1))

ValueError: operands could not be broadcast together with shapes (4,5) (4,)

【问题讨论】:

    标签: python numpy normalization array-broadcasting


    【解决方案1】:

    尝试使用转置矩阵:

    b = a.T
    m = (b - b.min(axis=0)) / (b.max(axis=0) - b.min(axis=0))
    m = m.T
    
    >>> a
    array([[2, 3, 2, 8, 3],   # min=2 -> 0, max=8 -> 1
           [3, 3, 9, 2, 1],   # min=1 -> 0, max=9 -> 1
           [1, 9, 8, 4, 7],   # min=1 -> 0, max=9 -> 1
           [6, 8, 7, 9, 4]])  # min=4 -> 0, max=9 -> 1
    
    >>> m
    array([[0.        , 0.16666667, 0.        , 1.        , 0.16666667],
           [0.25      , 0.25      , 1.        , 0.125     , 0.        ],
           [0.        , 1.        , 0.875     , 0.375     , 0.75      ],
           [0.4       , 0.8       , 0.6       , 1.        , 0.        ]])
    

    【讨论】:

    • 如果我使用转置矩阵作为我的输入,我必须对我的前向传播单元(一种常见的架构)进行什么样的改变以适应使用转置输入矩阵。我是否也应该转置权重矩阵?
    【解决方案2】:

    我有一个替代解决方案,我不确定这个是否正确。如果有人可以评论它会很棒。

    def row_normalize(mf):
      row_sums = np.array(mf.sum(1))
      new_matrix = mf / row_sums[:, np.newaxis]
      return new_matrix
    

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2017-09-11
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 2018-05-21
      • 2016-07-25
      • 2018-01-07
      相关资源
      最近更新 更多