对于集合 np.array([1, 2, 3]),其组成元素只有 9 种可能的组合/序列:[1, 1] , [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3].
如果我们有以下数组:
np.array([1, 1],
[1, 2],
[1, 3],
[2, 2],
[2, 3],
[3, 1],
[3, 2])
使用 NumPy/SciPy 确定 [2, 1] 和 [3, 3] 丢失的最佳方法是什么?换句话说,我们如何找到序列的逆列表(当我们知道所有可能的元素值时)?使用几个 for 循环手动执行此操作很容易弄清楚,但这会抵消我们通过使用 NumPy 而不是原生 Python 获得的任何速度提升(尤其是对于较大的数据集)。
请您参考如下方法:
您可以使用 itertools.product 生成所有可能对的列表并收集所有不在你的数组中的:
from itertools import product
pairs = [ [1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 1], [3, 2] ]
allPairs = list(map(list, product([1, 2, 3], repeat=2)))
missingPairs = [ pair for pair in allPairs if pair not in pairs ]
print(missingPairs)
结果:
[[2, 1], [3, 3]]
请注意 map(list, ...)需要将您的列表列表转换为可以与 product 返回的元组列表进行比较的元组列表.如果您的输入数组已经是元组列表,这可以简化。
