Python:如何合并两个NumPy数组以生成指定全组合二维数组?
生成两个NumPy数组的笛卡尔积
嘿,你想要的其实是两个一维数组的笛卡尔积(也就是所有元素的两两组合),NumPy里有几种简洁的方式可以实现,不用手动写循环拼接,效率还高!
方法1:兼容大多数NumPy版本(推荐)
如果你的NumPy版本比较旧(低于1.25),可以用np.meshgrid配合重塑形状来实现:
import numpy as np # 定义输入数组 a = np.arange(3).reshape(3) b = np.arange(3).reshape(3) # 生成笛卡尔积 result = np.array(np.meshgrid(a, b)).T.reshape(-1, 2) print(result)
运行后输出就是你要的:
[[0 0] [0 1] [0 2] [1 0] [1 1] [1 2] [2 0] [2 1] [2 2]]
原理说明
np.meshgrid(a, b)会生成两个3x3的二维数组,分别对应a的元素重复列、b的元素重复行.T转置后,每个位置的元素对就是我们需要的配对.reshape(-1, 2)把二维数组扁平成N行2列的结果,自动计算行数
方法2:NumPy 1.25+ 更直观的方式
如果你的NumPy版本是1.25及以上,可以直接用专门的np.cartesian_product函数,一步到位:
import numpy as np a = np.arange(3).reshape(3) b = np.arange(3).reshape(3) result = np.cartesian_product(a, b) print(result)
这个函数就是专门用来生成多个数组的笛卡尔积的,代码更易读,结果完全一致。
内容的提问来源于stack exchange,提问作者Mark A
相关产品推荐
相关产品推荐

