我有这个数组:
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