【问题标题】:Efficient algoritm to compare each element in a Numpy array with each other element in the same array将 Numpy 数组中的每个元素与同一数组中的其他元素进行比较的有效算法
【发布时间】:2021-07-25 17:22:57
【问题描述】:

我有一个数组 (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 循环)进行比较。

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

【问题讨论】:

标签: python numpy loops


【解决方案1】:

只需使用来自itertoolscombinations

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)]

【讨论】:

    【解决方案2】:

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

    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)])
    

    【讨论】:

      【解决方案3】:

      或坚持使用 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]])
      

      【讨论】:

        猜你喜欢
        • 2021-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-06
        相关资源
        最近更新 更多