只有长度为1的数组才能转换为Python标量

只有长度为1的数组才能转换为Python标量,python,arrays,Python,Arrays,嗨,我正试图得到以下问题的图: ux=U0,如果| x |≥ x0 ux=U0*| x |/x0如果| x |

嗨,我正试图得到以下问题的图: ux=U0,如果| x |≥ x0 ux=U0*| x |/x0如果| x | 和程序:

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()

请帮助:

ABX是一个数组,无法将数组转换为浮点值,这就是错误所在。您可以编写for循环来执行计算,但numpy可以通过numpy.where执行向量化if条件。有关更多信息,请阅读:

输出:

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

您的x是一个数组。abs需要一个标量。你想实现什么?@9000:abs不需要标量,它可以处理数组操作数;引发异常的是float。
if float(abs(x))>=x_0:
TypeError: only length-1 arrays can be converted to Python scalars
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)