如何在numpy

时间:2015-11-05 00:30:42

标签: python numpy intersection

我有以下问题:我有两个表面方程,我正在看它们是零的点。所以我有以下内容:

b = np.arange(0,2,0.1)
k = np.arange(0,50,1)
b,k = np.meshgrid(b,k)

通过这些我生成z1z2,大量公式,但它们都使用bk

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值,这给了我一个接近零的值。我需要的是找出哪些bk值与z1z2的给定结果相对应。

我试图将其编入索引,但我似乎没有正确地做到这一点。

2 个答案:

答案 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