Python中如何正确生成二维数组各子数组元素的所有组合
问题根因
np.meshgrid() 要求传入多个独立的数组作为位置参数,直接传入存储子数组的列表时,函数会将整个列表识别为单个输入参数,不会自动拆分列表内的子数组,因此生成的网格结果不符合预期。
修正方案
使用Python的参数解包操作符*,将列表内的子数组拆分为独立参数传入meshgrid即可,和传入独立声明数组的逻辑完全一致:
import numpy as np multi = [np.array([1,2]), np.array([3,4]), np.array([5,6])] combination = np.array(np.meshgrid(*multi)).T.reshape(-1, len(multi))
运行上述代码可以得到完全符合预期的结果:
array([[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]])
替代实现
如果不需要强制使用meshgrid,也可以用Python标准库itertools.product直接计算多个可迭代对象的笛卡尔积,写法更直观:
import numpy as np from itertools import product multi = [np.array([1,2]), np.array([3,4]), np.array([5,6])] combination = np.array(list(product(*multi)))
输出结果和上述方案完全一致。
内容的提问来源于stack exchange,提问作者bugninja
相关产品推荐
相关产品推荐

