TypeError:只有长度为 1 的数组可以转换为 Python 标量,而绘图显示

新手上路,请多包涵

我有这样的 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.5k
2 个回答

当函数需要单个值但您改为传递数组时,会引发错误“只有长度为 1 的数组可以转换为 Python 标量”。

np.int 是内置 int 的别名,在 numpy v1.20 中已弃用。 int 的参数应该是一个标量,它不接受类似数组的对象。一般来说,如果你想对数组的每个元素应用一个函数,你可以使用 np.vectorize

 import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return int(x)
f2 = np.vectorize(f)
x = np.arange(1, 15.1, 0.1)
plt.plot(x, f2(x))
plt.show()

您可以跳过 f(x) 的定义,只需将函数 int 传递给矢量化函数: f2 = np.vectorize(int)

请注意, np.vectorize 只是一个便利功能,基本上是一个 for 循环。这在大型阵列上效率低下。只要有可能,请使用真正的矢量化函数或方法(如 @FFT 建议astype(int) )。

原文由 ayhan 发布,翻译遵循 CC BY-SA 4.0 许可协议

采用:

 x.astype(int)

这是 参考

原文由 FFT 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题