python - 如何使浮点数到浮点数的函数在列表上表现为逐元素操作?
python - 如何使浮点数到浮点数的函数在列表上表现为逐元素操作?
我有以下代码:
def tau_r(u): return (u_1 < u < u_2) * (T1 - T2) + T2 if __name__ == "__main__": figure() plot(u, tau_r(u)) show()
当我运行它时,出现以下错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我猜是因为它将u视为一个列表,而它应该将任务分别应用于列表的每个元素。
我该如何修复这个问题?
问题出现的原因是因为在使用matplotlib绘图时,其不支持生成器作为输入。而在上述代码中,使用了生成器map(tau_r, u)作为输入,因此需要将其转换为列表形式list(map(tau_r, u))。
解决方法是将生成器转换为列表形式,即使用list()函数将map(tau_r, u)转换为列表形式。这样,就可以将转换后的列表作为参数传递给matplotlib的绘图函数,从而解决了matplotlib不支持生成器作为输入的问题。
需要注意的是,对于较长的列表u来说,使用map()函数和list()函数将生成器转换为列表的方法会非常慢。因此,在处理较长列表时,应考虑使用其他更高效的方法来实现相同的功能。