仅长度为1的数组可以转换为Python标量

0 投票
1 回答
37244 浏览
提问于 2025-04-17 19:19

你好,我正在尝试为以下问题绘制一个图:

U (x) = U0,当 |x| 大于等于 x0 时

U (x) = U0 * |x| / x0,当 |x| 小于 x0 时

还有程序:

from pylab import*
x_0=5
U_0=200
#U_x=zeros(n,1)
#x=zeros(n,1)
x=arange(-20,20,0.01)
if float(abs(x))>=x_0:
    U_x=U_0
elif float(abs(x))<x_0:
    U_x=U_0*(float(abs(x))/x_0)
fig=figure()
suptitle("a)") 
fig.subplots_adjust(hspace=0.5)
plot(x,U_x)
xlabel('x [m]')
ylabel('U_x [J]')
show()

但是我总是遇到这个错误:

if float(abs(x))>=x_0:
TypeError: only length-1 arrays can be converted to Python scalars

请帮帮我:)

1 个回答

8

这里提到的abs(x)是一个数组,你不能把这个数组直接转换成浮点数,这就是出错的原因。你可以写一个循环来进行计算,但numpy可以通过numpy.where来实现条件判断,这样会更高效。如果想了解更多,可以查看这个文档

import numpy as np
x = np.arange(-20, 20, 0.01)
x0 = 5
U0 = 200
u = np.where(np.abs(x) >= x0, U0, U0*np.abs(x)/x0)
plot(x, u, lw=3)

输出结果:

enter image description here

你还可以使用piecewise函数,它可以处理更复杂的情况。

撰写回答