You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在np.where函数中使用多条件(或、与逻辑)筛选numpy数组指定行

问题分析与解决方案

嘿,我一眼就瞅出你代码里的问题啦!你第二个筛选条件的范围搞错了——你用了整个数组第三列的最小值,但实际应该是在第二列等于最大值的那些行里找第三列的最小值。

为什么原来的代码只返回一行?

你的数据集里,第二列的最大值是6,对应的行是[5. , 6. , 2. ]、[4. , 6. , 3. ]、[3. , 6. , 4. ],这些行的第三列最小值是2。但你原来的代码里写的是arr[:,-1]==min(arr[:,-1]),这是拿所有行的第三列和整个数组的第三列最小值(也就是1.2)对比,显然第二列是6的行里没有第三列等于1.2的,所以第二个条件永远不满足,自然只返回第一行。

修正后的代码

我们可以先把需要的关键值计算出来,再构造筛选条件,这样逻辑更清晰:

import numpy as np

# 你的原始数组
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. ]])

# 计算第二列的最小、最大值
min_col2 = arr[:, 1].min()
max_col2 = arr[:, 1].max()

# 分别计算两种场景下第三列的最小值
min_col3_min_col2 = arr[arr[:, 1] == min_col2][:, 2].min()
min_col3_max_col2 = arr[arr[:, 1] == max_col2][:, 2].min()

# 构造正确的筛选条件
filter_condition = (
    (arr[:, 1] == min_col2) & (arr[:, 2] == min_col3_min_col2) |
    (arr[:, 1] == max_col2) & (arr[:, 2] == min_col3_max_col2)
)

# 得到结果
result = arr[filter_condition]
print(result)

运行这段代码,就能得到你预期的结果:

[[6.  1.  1.2]
 [5.  6.  2. ]]

简化版写法

如果你想把逻辑直接写在np.where里,也可以这样:

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

这样也能达到同样的效果,不过提前计算变量的方式可读性更强哦~

内容的提问来源于stack exchange,提问作者Link_tester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:12:40