在向量规范化期间更改 numpy 数组值时 numpy 中的问题

Issue in numpy when change numpy array value during vector normalization

假设我有一个 numpy 数组 a = np.array([[1,2,3],[2,3,4]])

我想把这两个向量变成单位向量。 工作代码是

for i in range(2):
    a[i] = a[i]/np.linalg.norm(a[i])

最后结果a变成:

一个=

array([[0, 0, 0],
       [0, 0, 0]])

而如果我 运行 计算并打印出结果

for i in range(2):
    print(a[i],i,np.linalg.norm(a[i]))

代码会打印出正确的结果作为单位向量。

因此我的问题是:1. 如果我将它分配给单位向量结果,为什么 numpy 数组会变为零。 2. 通过numpy数组将向量列表转换为单位向量的正确方法是什么?

非常感谢大家!

因为numpy.array()要求您声明数组中包含的对象的数据类型。如果未声明,它将被确定为最小数据类型。在您的情况下,它将是 int。要解决您的问题,您可以使用 dtype = float 创建一个新数组或声明 adtype.

a = np.array([[1,2,3],[2,3,4]], dtype=np.float32)