使用Plotly绘图时出现only size-1 arrays相关TypeError如何解决
问题原因
你遇到的报错本质和代码长度无关,核心问题是你使用了math.exp()处理numpy数组:math模块下的所有数学函数仅支持单个标量数值输入,而你传入的X/Y/Z是np.mgrid生成的多维numpy数组,无法直接转换为标量,因此触发类型错误。
你之前的简单函数示例能正常运行,是因为计算逻辑只有四则运算和乘方,这些运算符numpy本身做了向量化重载,没有调用math模块的函数,所以没有触发报错。你尝试的np.vectorize()属于不必要的操作,这个函数本质是循环封装,不仅效率低,也完全不匹配当前场景的需求。
解决方案
直接将代码中所有的math.exp替换为numpy对应的向量化实现np.exp即可,numpy的内置数学函数天然支持对整个数组做逐元素计算,完全适配你的计算逻辑。
修正后的对应代码段如下:
# 把math.exp全部替换为np.exp n1s2 = nns21 * (((3 * nas21 / pi) ** (1 / 4)) * np.exp( -nas21 * ((X + cXN1) ** 3 + (Y + cYN1) ** 2 + (Z + cZN1) ** 2))) + nns22 * ( ((2 * nas22 / pi) ** (1 / 4)) * np.exp( -nas22 * ((X + cXN1) ** 2 + (Y + cYN1) ** 3 + (Z + cZN1) ** 2)))
额外注意事项
后续如果有其他作用在numpy数组上的数学运算,都优先使用numpy内置的对应函数(比如np.sin、np.log等),不要使用math模块的函数,就能避免同类报错。
内容的提问来源于stack exchange,提问作者D V
相关产品推荐
相关产品推荐

