如何在数组内进行比较



我有这个数组:

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来做,但当我有一个最大的数组时,这种方法非常慢。

假设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。希望能有所帮助。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新