如何生成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
相关产品推荐
相关产品推荐

