Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用numpy范数除以numpy向量时,为什么不能使用就地除法运算符_Python_Numpy - Fatal编程技术网

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