繁体   English   中英

将 Numpy 数组中的每个元素与同一数组中的其他元素进行比较的高效算法

[英]Efficient algoritm to compare each element in a Numpy array with each other element in the same array

我有一个数组 (fe: [1,2,3,4,5,...]。我想将数组的每个元素与数组中的每个其他元素进行比较。所以我想要:

1-2
1-3
1-4
1-5
2-3
2-4
2-5
3-4
3-5
4-5

目前,这是我的代码

for el_a in my_array:
    idx_a = np.where(my_array == el_a)[0][0]
    for idx_b in range(idx_a+1, len(my_array)):
        el_b = my_array[idx_b]
        print(el_a,el_b)

我将每个元素 el_a(第一个 for 循环)与 el_a 之后的每个元素 el_b(第二个 for 循环)进行比较。

算法工作正常,但是速度很慢。 有人有更好、更有效的解决方案吗?

只需使用itertools combinations

import numpy as np
from itertools import combinations

arr = np.array([1, 2, 3, 4])
print(list(combinations(arr, 2)))

输出:

[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

这将以列表形式提供所有可能组合的比较结果:

import numpy as np
from itertools import combinations
my_array = np.array([1, 2, 3, 4, 5])
print([item[0]==item[1] for item in combinations(my_array,2)])

或坚持使用 numpy

a = np.arange(5)
b = np.arange(5)
# for both -> array([0, 1, 2, 3, 4])

(a[:, None] == b)
array([[ True, False, False, False, False],
       [False,  True, False, False, False],
       [False, False,  True, False, False],
       [False, False, False,  True, False],
       [False, False, False, False,  True]])

(a[:, None] == b).astype(np.int32)
array([[1, 0, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 1, 0],
       [0, 0, 0, 0, 1]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM