我有这样的 Python 代码:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.int(x)
x = np.arange(1, 15.1, 0.1)
plt.plot(x, f(x))
plt.show()
还有这样的错误:
TypeError: only length-1 arrays can be converted to Python scalars
我该如何解决?
原文由 K. Kovalev 发布,翻译遵循 CC BY-SA 4.0 许可协议
当函数需要单个值但您改为传递数组时,会引发错误“只有长度为 1 的数组可以转换为 Python 标量”。
np.int
是内置int
的别名,在 numpy v1.20 中已弃用。 int 的参数应该是一个标量,它不接受类似数组的对象。一般来说,如果你想对数组的每个元素应用一个函数,你可以使用np.vectorize
:您可以跳过 f(x) 的定义,只需将函数
int
传递给矢量化函数:f2 = np.vectorize(int)
。请注意,
np.vectorize
只是一个便利功能,基本上是一个 for 循环。这在大型阵列上效率低下。只要有可能,请使用真正的矢量化函数或方法(如 @FFT 建议 的astype(int)
)。