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

求助:计算Numpy数组中符合特定非支配条件的行数

帕累托最优行统计解决方案

问题明确

给定一个50行15列的Numpy数组,需要统计满足以下条件的行数:不存在其他行(排除自身),使得该行所有列值≤当前行,且至少有一列值严格小于当前行。

核心逻辑

这个问题本质是寻找数组中的帕累托最优行——即没有其他行能在所有维度上不劣于它,同时至少在一个维度上更优。

实现步骤

1. 生成行比较矩阵

利用Numpy的广播特性,计算每一行与其他所有行的逐列比较结果:

  • 先判断行j的所有列是否≤行i
  • 再判断行j是否至少有一列严格<行i
  • 合并两个条件,得到行j是否“弱小于”行i的矩阵

2. 筛选符合要求的行

对于每一行,若对应的比较行中没有任何一行满足“弱小于”条件,则该行符合要求,统计这类行的总数。

代码实现

import numpy as np

# 假设你的数据已经转为Numpy数组x
# x = x.to_numpy()

# 示例数据测试
x = np.array([
    [10, 80],
    [20, 70],
    [30, 90],
    [25, 50],
    [35, 10],
    [40, 60],
    [50, 10]
])

# 计算行i >= 行j的逐列布尔矩阵
row_ge = x[:, np.newaxis, :] >= x[np.newaxis, :, :]
# 行j弱小于行i的条件:所有列<=行i,且至少一列<行i
weak_less_mask = np.all(row_ge, axis=2) & np.any(x[:, np.newaxis, :] > x[np.newaxis, :, :], axis=2)
# 排除自身比较(对角线置为False)
np.fill_diagonal(weak_less_mask, False)

# 统计无弱小于行的数量
valid_count = np.sum(~np.any(weak_less_mask, axis=1))
print(valid_count)  # 示例输出:3

性能说明

对于50行15列的数据集,该算法的时间复杂度为O(n²*d)(n=50,d=15),计算量极小,无需额外优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:01:35