没有迭代器的 Numpy 数组的组合/笛卡尔积 and/or 循环
Combinatoric / cartesian product of Numpy arrays without iterators and/or loop(s)
以下代码
import numpy as np
import itertools
a_p1 = np.arange(0, 4, 1)
a_p2 = np.arange(20, 25, 1)
params = itertools.product(a_p1, a_p2)
for (p1, p2) in params:
print(p1, p2)
产出
(0, 20) (0, 21) (0, 22) (0, 23) (0, 24) (1, 20) (1, 21) (1, 22) (1, 23) (1, 24) (2, 20) (2, 21) (2, 22) (2, 23) (2, 24) (3, 20) (3, 21) (3, 22) (3, 23) (3, 24)
2个嵌套的for循环也能输出同样的结果
for i, p1 in enumerate(a_p1):
for j, p2 in enumerate(a_p2):
print(p1, p2)
我正在寻找一种解决方案来直接输出具有这种组合的 Numpy 数组(Numpy 元组数组)。
有没有办法生成这样一个没有迭代器的 Numpy 数组 and/or for 循环?
我知道这样的解决方案比使用迭代器更消耗内存。
安装 Scikit-Learn http://scikit-learn.org/
from sklearn.utils.extmath import cartesian
print cartesian([a_p1, a_p2])
应该输出
[[ 0 20]
[ 0 21]
[ 0 22]
[ 0 23]
[ 0 24]
[ 1 20]
[ 1 21]
[ 1 22]
[ 1 23]
[ 1 24]
[ 2 20]
[ 2 21]
[ 2 22]
[ 2 23]
[ 2 24]
[ 3 20]
[ 3 21]
[ 3 22]
[ 3 23]
[ 3 24]]
这个解决方案来自一个类似的问题:
Using numpy to build an array of all combinations of two arrays
以下代码
import numpy as np
import itertools
a_p1 = np.arange(0, 4, 1)
a_p2 = np.arange(20, 25, 1)
params = itertools.product(a_p1, a_p2)
for (p1, p2) in params:
print(p1, p2)
产出
(0, 20) (0, 21) (0, 22) (0, 23) (0, 24) (1, 20) (1, 21) (1, 22) (1, 23) (1, 24) (2, 20) (2, 21) (2, 22) (2, 23) (2, 24) (3, 20) (3, 21) (3, 22) (3, 23) (3, 24)
2个嵌套的for循环也能输出同样的结果
for i, p1 in enumerate(a_p1):
for j, p2 in enumerate(a_p2):
print(p1, p2)
我正在寻找一种解决方案来直接输出具有这种组合的 Numpy 数组(Numpy 元组数组)。
有没有办法生成这样一个没有迭代器的 Numpy 数组 and/or for 循环?
我知道这样的解决方案比使用迭代器更消耗内存。
安装 Scikit-Learn http://scikit-learn.org/
from sklearn.utils.extmath import cartesian
print cartesian([a_p1, a_p2])
应该输出
[[ 0 20]
[ 0 21]
[ 0 22]
[ 0 23]
[ 0 24]
[ 1 20]
[ 1 21]
[ 1 22]
[ 1 23]
[ 1 24]
[ 2 20]
[ 2 21]
[ 2 22]
[ 2 23]
[ 2 24]
[ 3 20]
[ 3 21]
[ 3 22]
[ 3 23]
[ 3 24]]
这个解决方案来自一个类似的问题: Using numpy to build an array of all combinations of two arrays