【问题标题】:normalizing a matrix in numpy在 numpy 中对矩阵进行归一化
【发布时间】:2017-09-11 02:16:38
【问题描述】:

np.linalg.norm(x, axis = 1, keepdims=True) 返回什么?

我有一个矩阵 np.array([[3.0,4.0],[1, 2]]) 。我正在尝试规范化矩阵的每一行。答案应该是np.array([[0.6,0.8],[0.4472136,0.89442719]]),但我无法理解代码是如何获得答案的。

代码如下:

x  = np.array([[3.0,4.0],[1, 2]])
norms = np.linalg.norm(x, axis = 1, keepdims = True)
x /= norms

这段代码应该给出标准化的 x,但我不明白 np.linalg.norm() 在这里返回什么。

【问题讨论】:

  • 给出 L2 范数并保持维数不变,即减少的维数保持为单例暗淡(长度轴 = 1)。
  • 如果您的问题可以通过Google search 回答,那么您在此处提问之前还没有付出最少的努力。
  • docs.scipy.org/doc/numpy/reference/generated/… 中没有提到 L2 规范。 Numpy 在文档中的任何地方都没有提到欧几里得范数。 @user2357112
  • 注释下:None Frobenius norm 2-norm。如果你用谷歌搜索Frobenius norm2 norm,你就会得到它。
  • @PranayAryal:见Notes 下的表格,上面说为ord=None 计算的向量范数是2-范数。

标签: python numpy normalization


【解决方案1】:

np.linalg.norm(x, axis = 1, keepdims=True) 在每一行都这样做(对于 x):

np.sqrt(3**2 + 4**2) x 的第 1 行给出 5

np.sqrt(1**2 + 2**2) x 的第 2 行给出 2.23

这个向量[5, 2.23] 就是norms 变量

然后将 x 中的所有值除以这个 norms 变量,它应该给你 np.array([[0.6,0.8],[0.4472136,0.89442719]])。我希望这会有所帮助

另请参阅http://mathworld.wolfram.com/FrobeniusNorm.html

【讨论】:

  • 您在 7 分钟内提出并回答了问题。在这里提问之前,您应该好好搜索一下您的问题!
  • @RenS 提出并回答了这个问题,以便对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-07-25
  • 2012-01-17
  • 2011-05-30
  • 2014-08-09
  • 2015-04-10
  • 2012-07-10
  • 2016-07-23
  • 2017-10-15
相关资源
最近更新 更多