创建带错误的step函数:包含多个元素的数组的真值不明确

2024-04-19 07:49:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用if/else语句生成一个box或step函数。例如:

import matplotlib.pyplot as plt
import numpy as np

def V(x):
    if -1<=x<=1:
        return 20
    else:
        return 0
x=np.linspace(0,100)

plt.plot(x,V(x))

但是,我得到了一个错误:

包含多个元素的数组的真值不明确。使用a.any()或a.all()

我理解这是因为它试图一次比较所有的x输入值,但不能这样做,但我不明白为什么它不一次只做一个,并输出每个值。事实上,如果我一次只输入一个x,它就工作了。有没有一个简单的方法来克服这个问题?你知道吗


Tags: 函数importnumpyboxreturnifmatplotlibdef
2条回答

使用map将函数应用于x的每个值:

x = np.linspace(0, 100)
plt.plot(x, list(map(V, x)))

出现错误的原因是,当函数被设计用于单个元素时,您正试图对整个数组应用函数。你知道吗

不过,更好的方法是将函数矢量化:

def V(x):
    res = np.zeros(len(x))
    res[np.where(np.abs(x)<1)] = 20
    return res

x = np.linspace(0, 100)
plt.plot(x, V(x))

只需循环x,对每个值应用V(x),并将每个值保存在一个数组中。你知道吗

y = np.zeros(len(x))
for i,j in enumerate(x):
   y[i] = v(j)

plt.plot(x,y)

相关问题 更多 >