嵌套循环-TypeError:只有size-1数组可以转换为Python标量



我试图用两个不同的变量找到最大值:

import numpy as np
import matplotlib.pyplot as plt
from math import pi, sqrt

i =.5
l = .01
u = 4*pi*10**-7

angle = np.linspace(0,pi/2,20)
d = np.linspace(0,.5, 50)
B = []
for ang in angle:
for dis in d:
x = (u*i*np.cos(ang))/(pi*sqrt((l/2)**2 + d**2))
B.append(max(x))

然而,它一直给我"TypeError: only size-1 arrays can be converted to Python scalars"

我甚至不知道这意味着什么。

您的问题是由math.sqrt()函数引起的,该函数试图获得一个向量作为输入:与l相关的项是标量,而与d相关的项则是向量。通常,Python会尝试将标量值添加到向量中的每个条目,从而生成一个向量。如果这是您想要的,您可以将数学包的sqrt替换为np.sqrt()

让我们看看为什么会出现这种情况:

math.sqrt()只接受标量作为输入。如果数组的大小为1,然后将其转换为标量:,那么它也可以工作

>>> math.sqrt(np.array([4]))
2.0

这在您的案例中是尝试过的,但失败了,因为括号中的术语是一个大小大于1的向量。你可以在一个更简单的例子中尝试一下:

>>> math.sqrt(np.array([9, 25]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: only size-1 arrays can be converted to Python scalars

在这些情况下,您可以只使用numpy的sqrt方法,而不是math的方法:

>>> np.sqrt(np.array([9, 25]))
array([3., 5.])

相关内容

  • 没有找到相关文章

最新更新