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

如何生成numpy多维数组中所有子数组的两两组合?

获取numpy数组中所有两子数组的组合方法

要从你的numpy数组中提取所有由两个子数组组成的无序组合,有两种常用方法:

方法1:使用itertools.combinations(简单直观)

itertools库的combinations函数专门用于生成序列的所有不重复无序组合,非常适合你的需求:

import numpy as np
from itertools import combinations

a = np.array([[1, 2], [3, 5], [4,5], [9,5]])
# 生成所有两子数组的组合,返回迭代器
comb_iter = combinations(a, 2)
# 转成列表或numpy数组(按需选择)
comb_list = list(comb_iter)
comb_array = np.array(comb_list)

# 输出示例:第一个组合就是[[1,2],[3,5]]
print(comb_array[0])

该方法生成的组合不会包含重复的配对(比如不会同时出现[[1,2],[3,5]]和[[3,5],[1,2]]),如果需要有序的排列对,将combinations替换为permutations即可。

方法2:纯numpy实现(无需额外库)

如果不想导入itertools,可以用numpy的索引功能实现:

import numpy as np

a = np.array([[1, 2], [3, 5], [4,5], [9,5]])
n = a.shape[0]  # 获取子数组的总数
# 生成所有i<j的索引对(避免重复组合)
row_indices, col_indices = np.triu_indices(n, k=1)
# 按索引对拼接子数组,得到组合数组
comb_array = np.stack([a[row_indices], a[col_indices]], axis=1)

# 查看结果
print(comb_array)

这里np.triu_indices(n, k=1)生成的是数组上三角区域(排除对角线)的索引,正好对应所有不重复的两元素组合,最终得到的comb_array和方法1的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:25:26