规范化numpy矩阵中的行

时间:2016-06-20 04:50:40

标签: python numpy matrix

我试图使用L2范数(单位长度)标准化numpy矩阵的行。

当我这样做时,我发现了一个问题。

假设我的矩阵'b'如下:

enter image description here

现在,当我按照下面的方式对第一行进行规范化时,它可以正常工作。

enter image description here

但是当我尝试通过遍历所有行并转换下面的相同矩阵b来完成它时,它给了我全部零。

知道为什么会发生这种情况以及如何获得正确的规范化?

任何更快的行规范化矩阵的方法,而不必迭代每一行?我不想使用sci-kit学习规范化功能。

由于

enter image description here

1 个答案:

答案 0 :(得分:2)

问题来自b类型为int的事实,因此当您逐行填写时,numpy会自动转换您的计算结果(float)至int,因此为零。避免这种情况的一种方法是使用bfloat等来定义0.类型1.,或者只是在定义时添加.astype(float)

这应该可以一次完成计算,而且不需要先转换为float

b = b / np.linalg.norm(b, axis=1, keepdims=True)

这是有效的,因为您要重新定义整个数组,而不是逐个更改其行,而numpy足够聪明,可以使其成为float