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

基于多列有序模式对2D numpy数组排序/聚类的无迭代实现方法

实现方法

核心逻辑是为每一行生成唯一的相对大小模式标识,相同标识的行属于同一分组,全程使用numpy向量化操作,无需显式迭代,可适配任意列数的输入数组。

完整代码

import numpy as np

# 输入数组
arr = np.array([
    [4, 5, 2],
    [5, 5, 1],
    [5, 4, 5],
    [5, 3, 4],
    [5, 4, 4],
    [4, 3, 2]
])

col_num = arr.shape[1]
# 生成每一行的元素相对大小排名,相同元素值的排名一致
ge_mask = arr[:, :, None] >= arr[:, None, :]
rank = ge_mask.sum(axis=-1)
# 将每一行的排名转换为唯一数值作为排序分组的key
sort_key = rank.dot(10 ** np.arange(col_num - 1, -1, -1))

# 1. 按模式排序后的完整数组,与期望输出完全匹配
sorted_arr = arr[np.argsort(-sort_key)]
print("按模式排序结果:")
print(sorted_arr)

# 2. 聚类分组结果
unique_keys = np.unique(sort_key)
groups = [arr[sort_key == k] for k in unique_keys[::-1]]
print("\n聚类分组结果:")
for idx, group in enumerate(groups, 1):
    print(f"第{idx}组:")
    print(group)

输出结果

按模式排序结果:
[[5 5 1]
 [5 4 4]
 [4 3 2]
 [5 4 5]
 [5 3 4]
 [4 5 2]]

聚类分组结果:
第1组:
[[5 5 1]
 [5 4 4]
 [4 3 2]]
第2组:
[[5 4 5]
 [5 3 4]]
第3组:
[[4 5 2]]

适配说明

如果输入数组列数较多,可将key的计算方式替换为哈希值或者使用更大的系数(比如100进制)避免数值冲突,核心逻辑无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:06