Python代码报only size-1 arrays can be converted to Python scalars错误如何解决
错误原因
你的推测正确,该报错由使用math标准库函数传入numpy数组导致:math.sin()、math.cos()仅支持接收单个标量数值作为输入,而代码中的y是长度为n的numpy数组,无法被自动转换为单个标量,因此触发错误。
最优解决方案
将math库的三角函数替换为numpy原生的向量化三角函数np.sin()、np.cos(),可以直接对整个数组逐元素计算,不需要额外循环,运行效率更高。
修改后的代码如下:
import numpy as np def chebs(c, d, n): k = np.array(range(n)) y = ((2*k +1)*np.pi)/(4*(n+1)) return c * np.sin(y) ** 2 + d * np.cos(y) ** 2
其他可选方案(不推荐)
如果必须使用math库函数,需要循环遍历数组的每一个元素单独计算再汇总结果,该方式在n较大时运行效率远低于numpy向量化方案:
import math import numpy as np def chebs(c, d, n): k = np.array(range(n)) y = ((2*k +1)*np.pi)/(4*(n+1)) result = np.empty_like(y) for idx, yi in enumerate(y): result[idx] = c * math.sin(yi) ** 2 + d * math.cos(yi) ** 2 return result
内容的提问来源于stack exchange,提问作者Ryan McAree
相关产品推荐
相关产品推荐

