如何在 np.where 函数中放入多个条件(一个或两个和)

How to put multiple conditions (one or and two and) in np.where function

我有一个多行三列的 numpy 数组。我想做一个 np.where 函数来在所有现有行中找到两行。我想要的第一行是第二列中值最小的行,第三列也是最小值。第二行是在其第二列中具有最高值的行。在这些行中,我的目标在其第三列中的值最小。这是我的数据集:

arr=np.array([[6. , 1. , 1.2],
              [5.5, 3. , 1.5],
              [5. , 1. , 2. ],
              [5. , 3. , 2. ],
              [5. , 6. , 2. ],
              [4. , 1. , 3. ],
              [4. , 3. , 3. ],
              [4. , 6. , 3. ],
              [3. , 1. , 4. ],
              [3. , 3. , 4. ],
              [3. , 6. , 4. ]])

然后我尝试使用两个 & 和一个 |:

arr[np.where(((arr[:,1]==min(arr[:,1])) & (arr[:,-1]==min(arr[:,-1]))) |
             ((arr[:,1]==max(arr[:,1])) & (arr[:,-1]==min(arr[:,-1]))))]

获得

np.array([[6. , 1. , 1.2], [5. , 6. , 2. ]]

但它只给我:

np.array([[6. , 1. , 1.2]]

非常感谢任何帮助解决我的问题。

这应该会如您所愿

arr1 = arr[arr[:,1]==min(arr[:,1])]
arr1 = arr1[(arr1[:,-1]==min(arr1[:,-1]))]

arr2 = arr[(arr[:,1]==max(arr[:,1]))]
arr2 = arr2[(arr2[:,-1]==min(arr2[:,-1]))]

np.concatenate([arr1, arr2])
a1 = arr[:, 1]
a2 = arr[:, 2]
a1mn = a1.min()
a1mx = a1.max()
ia1mn = (a1 == a1mn)
ia1mx = (a1 == a1mx)

out = arr[(ia1mn & (a2 == a2[ia1mn].min())) | (ia1mx & (a2 == a2[ia1mx].min()))]