python - 如何在python numpy中标准化二维数组的一维? [复制]

Posted

技术标签:

【中文标题】python - 如何在python numpy中标准化二维数组的一维? [复制]【英文标题】:How to normalize one dimension of a 2-dimensional array in python numpy? [duplicate] 【发布时间】:2014-06-28 11:13:17 【问题描述】:

例如,对二维向量中的每一行进行归一化,使得一行的大小为 1:

import numpy as np

a = np.arange(0,27,3).reshape(3,3)

result = a / norm_of_rows( a )

这样:

np.sum( result**2, axis=-1 )
# array([ 1.,  1.,  1.]) 

原来的问题,How to normalize a 2-dimensional numpy array in python less verbose?,人们觉得我的问题是重复的,作者实际上是问如何使每一行的元素总和为一个。这不同于对每一行进行归一化,使其大小为 1(每个元素的平方和等于 1)。

【问题讨论】:

重复***.com/q/8904694/1461210 我问这个问题是因为 让标题和原始描述之间的区别更加清晰会很有帮助。无论如何,答案几乎是相同的。您已经拥有np.sum( result**2, axis=-1 ),这是您希望每行等于 1 的值。您只需要记住在除法之前取平方根(请记住,您是对result**2 的行求和,而不是result)。所以答案可能类似于:result_norm = result / np.sqrt(np.sum(result**2, axis=-1))[:, None](注意使用[:, None] 对行进行广播)。 此外,在 numpy > 1.9 的版本中,np.linalg.norm 接受 axis= 参数。由于您本质上希望使每一行的欧几里得范数等于 1,因此对于最新版本,您只需执行 result_norm = result / np.linalg.norm(result, ord=2, axis=-1)[:, None] 【参考方案1】:

np.max(a[0,:]) 会给你第一行的最大值, np.max(a[1,:]) 会给你第二行的最大值

要标准化整个矩阵,只需遍历行并将每个元素除以相应的max_row

【讨论】:

考虑np.max(a, axis=1)a / np.max(a, axis=1)[:,None]。对于大多数操作,您不应该使用 python 循环遍历 numpy 数组。

以上是关于python - 如何在python numpy中标准化二维数组的一维? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NumPy 在 Python 中读取二进制文件?

如何在Python中搜索Numpy数组中的数字

如何在 python 中找到 numpy 矩阵的长度(或尺寸、大小)? [复制]

如何在 Python 中使用带有“None”值的 numpy?

如何在python 3中有效地将原始字节写入numpy数组数据

如何在 Python3 中解码编码文字/字符串的 numpy 数组? AttributeError:“numpy.ndarray”对象没有属性“解码”