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中标准化二维数组的一维? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中找到 numpy 矩阵的长度(或尺寸、大小)? [复制]
如何在 Python 中使用带有“None”值的 numpy?
如何在python 3中有效地将原始字节写入numpy数组数据
如何在 Python3 中解码编码文字/字符串的 numpy 数组? AttributeError:“numpy.ndarray”对象没有属性“解码”