我有以下问题:我有两个表面方程,我正在看它们是零的点。所以我有以下内容:
b = np.arange(0,2,0.1)
k = np.arange(0,50,1)
b,k = np.meshgrid(b,k)
通过这些我生成z1
和z2
,大量公式,但它们都使用b
和k
:
z1 = ((0.5*rho*k**2 * Vd**2 * c)*(Cl * 0.1516*b**3 +
Cd*(((b*np.sqrt(b**2 * k**2 +1))/(2*k**2)) -
((np.log(np.sqrt(b**2 * k**2 + 1) + b*k))/(2*k**3)))) - F)
z2 = ((Cl * 0.1516 * b**3 * k**(-1)) -
((Cd/(8*k**4))*((3*np.log(np.sqrt(b**2 * k**2 + 1) + b*k)) +
(b*np.sqrt(b**2 * k**2 +1)*(2*b**2 * k**2 -3)*k))))
现在我知道如何找到z1和z2为零的最近点。如下所示:
print min(z1[(-0.1<z1)&(z1<0.1)]), min(z2[(-0.1<z2)&(z2<0.1)])
但是有了这些,我只得到z值,这给了我一个接近零的值。我需要的是找出哪些b
和k
值与z1
或z2
的给定结果相对应。
我试图将其编入索引,但我似乎没有正确地做到这一点。
答案 0 :(得分:1)
在这种情况下,您的&#34;接近零&#34;表达式(-0.1<z1)&(z1<0.1)
是一个布尔数组。要查找True
项的索引,您只需使用nonzero()
。
(-0.1<z1) & (z1<0.1).nonzero()
例如:
>>> np.array([False, False, True, False, True, True, False]).nonzero()
(array([2, 4, 5]),)
答案 1 :(得分:0)
为什么不在z1和z2的绝对值上使用argmin?
如何使用argmin的示例:
>>> t = np.random.rand(4,3)
>>> t
array([[ 0.55809884, 0.34630428, 0.78713403],
[ 0.15125035, 0.07231524, 0.06975387],
[ 0.63233302, 0.48026985, 0.21420412],
[ 0.32713745, 0.95168682, 0.34994332]])
>>> np.min(t)
0.069753866909461171
>>> np.argmin(t)
5
>>> t[5//3, 5%3] # 5 is the argmin, 3 is my number of columns
0.069753866909461171