我试图使用L2范数(单位长度)标准化numpy矩阵的行。
当我这样做时,我发现了一个问题。
假设我的矩阵'b'如下:
现在,当我按照下面的方式对第一行进行规范化时,它可以正常工作。
但是当我尝试通过遍历所有行并转换下面的相同矩阵b来完成它时,它给了我全部零。
知道为什么会发生这种情况以及如何获得正确的规范化?
任何更快的行规范化矩阵的方法,而不必迭代每一行?我不想使用sci-kit学习规范化功能。
由于
答案 0 :(得分:2)
问题来自b
类型为int
的事实,因此当您逐行填写时,numpy
会自动转换您的计算结果(float
)至int
,因此为零。避免这种情况的一种方法是使用b
,float
等来定义0.
类型1.
,或者只是在定义时添加.astype(float)
。
这应该可以一次完成计算,而且不需要先转换为float
:
b = b / np.linalg.norm(b, axis=1, keepdims=True)
这是有效的,因为您要重新定义整个数组,而不是逐个更改其行,而numpy
足够聪明,可以使其成为float
。