在向量规范化期间更改 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
创建一个新数组或声明 a
的 dtype
.
a = np.array([[1,2,3],[2,3,4]], dtype=np.float32)
假设我有一个 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
创建一个新数组或声明 a
的 dtype
.
a = np.array([[1,2,3],[2,3,4]], dtype=np.float32)