Given 1d数组 w 和 x,下面,我可以使用以下代码形成笛卡尔积。
import numpy as np
w = np.array([1, 2, 3, 4])
x = np.array([1, 2, 3, 4])
V1 = np.transpose([np.repeat(w, len(x)), np.tile(x, len(w))])
print(V1)
[[1 1]
[1 2]
[1 3]
[1 4]
[2 1]
[2 2]
[2 3]
[2 4]
[3 1]
[3 2]
[3 3]
[3 4]
[4 1]
[4 2]
[4 3]
[4 4]]
但是,我希望输出 V1 包括仅限 w (如下所示)。我可以用循环来做到这一点,但我希望速度更快一些。
[[1 2]
[1 3]
[1 4]
[2 3]
[2 4]
[3 4]]
使用 itertools 尝试这一行方法 -
import itertools
w = np.array([1, 2, 3, 4])
x = np.array([1, 2, 3, 4])
[i for i in itertools.product(w,x) if i[0]<i[1]]
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
Itertools 速度极快且内存效率极高。它应该非常快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)