Python 用numpy范数除以numpy向量时,为什么不能使用就地除法运算符
此代码执行时没有问题:Python 用numpy范数除以numpy向量时,为什么不能使用就地除法运算符,python,numpy,Python,Numpy,此代码执行时没有问题: import numpy as np x = np.array([1, 3]) x = x / np.linalg.norm(x) 但这段代码崩溃了: import numpy as np x = np.array([1, 3]) x /= np.linalg.norm(x) 错误如下: TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided out
import numpy as np
x = np.array([1, 3])
x = x / np.linalg.norm(x)
但这段代码崩溃了:
import numpy as np
x = np.array([1, 3])
x /= np.linalg.norm(x)
错误如下:
TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'l') according to the casting rule ''same_kind''
为什么?基本上是因为numpy关心类型,正如错误所暗示的那样(“…无法强制…”“同类”) 您正在将
x
创建为整数数组,但是np.linalg.norm(x)
返回一个浮点,强制x/np.linalg.norm(x)
返回一个浮点数组
如果将x
创建为浮点数组:
x = np.array([1.0, 3.0])
那就行了
import numpy as np
x = np.array([1.0, 3.0])
x /= np.linalg.norm(x)
print(x)
# [0.31622777 0.9486833 ]
你希望得到比“因为numpy开发人员没有实现它”更深刻的答案吗?是的,我尝试使用pycharm调试器来查看到底出了什么问题,但我无法确切地找出TypeError发生的位置,实际上从调试器看,好像带就地运算符的“错误”行经过,但这似乎很奇怪。异常回溯是否没有告诉您TypeError发生的确切位置?请注意,错误消息集中在
输出
,特别是数据类型(typecode)、“d”和“l”(请参见np.typecodes
)。赞美诗,我的意思是我无法理解它是如何从它指出的那一行到抛出异常的。但是为什么numpy不关心第一个例子中的类型呢x/np.linalg.norm(x)
实际上运行良好。@Sahand,因为它不在适当的位置。它只是告诉x
引用内存中的新位置。它与执行x=7
没有太大区别,与numpy