【问题标题】:How compare inside an array?如何在数组内部进行比较?
【发布时间】:2020-04-06 18:03:40
【问题描述】:

我有这个数组:

array([[4798, 1369, 4139, ..., 2910, 2901,    0],
       [   2, 3161, 1343, ..., 2085, 2065, 2399],
       [ 546,  506,  614, ..., 1874, 1859, 4799],
       [   0,  634, 1341, ..., 1886, 1871, 4799]], dtype=int64)

我可以看到最后一行中有两个相等的数字 (4799)。我想要的是制作一个比较相邻行并返回具有相等数字的数组或列表的函数。 我不知道该怎么做。我尝试用for 来做,但是当我有一个最大的数组时,这个方法很慢。

【问题讨论】:

  • 您想将每一行与每一行进行比较吗?还是只是相邻的行?
  • 只是相邻的行
  • 到目前为止你尝试过什么?您需要帮助解决什么具体问题?你想要的输出是什么?

标签: python arrays numpy numbers compare


【解决方案1】:

假设a 是您的数组。然后尝试以下可能会有所帮助的方法,

def equalnumbers(a):
    row,col = np.where((a[1:,:]-a[:-1,:]) ==0)
    return a[row,col]

试用示例:

请注意,我使用的数组有两个在相邻行中相等的数字。还有两次数字 0,但在不相邻的行中!

import numpy as np
a = np.array([[4798, 1369, 4139, 2910, 2901, 0],
             [4798, 3161, 1343, 2085, 2065, 2399],
             [546,  506,  614, 1874, 1859, 4799],
             [0,  634, 1341, 1886, 1871, 4799]]) 

equalnumbers(a)

输出:

array([4798, 4799])

该函数只返回相邻行的相等数字,而不是非相邻行中存在的 0。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    我做出以下假设来回答您的问题:

    • 您无需检测值在 A 行和 B 行中出现的频率
    • 您想将一行与另一行进行比较,逐行比较
    • 您比较的两行中数字的顺序无关紧要(如果顺序很重要,您应该使用 numpy.equal())

    首先,对要比较的两行使用set() 函数。然后在两组上使用交集运算符&。它返回一个新集合,其中包含两个集合 Python Docs - 8.7. sets 共有的元素。

    for i in range(len(array)):
        # Start at i+1 to prevent double comparison of row pairs
        for j in range(i+1, len(array)):  
            set_a = set(array[i])
            set_b = set(array[j])
            intersection = set_a & set_b
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2021-12-28
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2020-02-26
      • 2021-05-18
      相关资源
      最近更新 更多