我试图用两个不同的变量找到最大值:
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.])