Python 使用matplotlib绘制逐段函数会导致ValueError:包含多个元素的数组的真值不明确

Python 使用matplotlib绘制逐段函数会导致ValueError:包含多个元素的数组的真值不明确,python,numpy,matplotlib,Python,Numpy,Matplotlib,我想使用matplotlib绘制分段函数: import numpy as np import matplotlib.pyplot as plt def pwf(x): return 0 if x < 0 else 1 x = np.linspace(-1, 1, 100) plt.plot(x, pwf(x)) 将numpy导入为np 将matplotlib.pyplot作为plt导入 def pwf(x): 如果x

我想使用
matplotlib
绘制分段函数:

import numpy as np
import matplotlib.pyplot as plt

def pwf(x):
    return 0 if x < 0 else 1
x = np.linspace(-1, 1, 100)
plt.plot(x, pwf(x))
将numpy导入为np
将matplotlib.pyplot作为plt导入
def pwf(x):
如果x<0,则返回0,否则返回1
x=np.linspace(-1,1100)
plt.绘图(x,pwf(x))
我得到以下错误:

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

但是,在使用
(x<0).any()
时,我只得到
True
,而在
(x<0.all()
时,我得到
False
,两者都不适合我的情况


我在这里找到了答案:,但是问题和答案都被不必要的代码塞得太多,所以我决定发布一个简洁的解决方案。

一个简单的解决方案是使用Python的列表理解:

x = np.linspace(-1, 1, 100)
y = [pwf(x) for x in x]
plt.plot(x, y)
迈克·穆勒的回答要归功于他。

你可以使用

def pwf(x):
    return (x < 0).astype(float)
def pwf(x):
返回值(x<0)。aType(浮点)
或者,对于使用0和1以外的数字的解决方案

def pwf(x):
    return np.array([1,0])[(x < 0).astype(int)]
def pwf(x):
返回np.array([1,0])[(x<0.astype(int)]
此类问题的一般解决方案是将函数矢量化:

import matplotlib.pyplot as plt
import numpy as np

def pwf(x):
    return 0 if x < 0 else 1

x = np.linspace(-1, 1, 100)

plt.plot(x, np.vectorize(pwf)(x))
plt.show()
导入matplotlib.pyplot作为plt
将numpy作为np导入
def pwf(x):
如果x<0,则返回0,否则返回1
x=np.linspace(-1,1100)
plt.plot(x,np.矢量化(pwf)(x))
plt.show()
打印(x)
添加到
pwf
。和
打印(xrelated?: