查找数组中重复元素的索引(Python,NumPy) [英] Find indexes of repeated elements in an array (Python, NumPy)
问题描述
假设,我有一个整数的NumPy数组,如下:
Assume, I have a NumPy-array of integers, as:
[34,2,3,22,22,22,22,22,22,18,90,5,-55,-19,22,6,6,6,6,6,6,6,6,23,53,1,5,-42,82]
我想找到数组的开始和结束索引,其中值大于重复的x倍(例如5倍).因此,在上述情况下,其值为22和6.重复项22的开始索引为3,结束索引为8.重复项6相同. Python中是否有一个有用的特殊工具? 否则,我将遍历数组索引以获取索引,并将实际值与前一个进行比较.
I want to find the start and end indices of the array, where a value is more than x-times (say 5-times) repeated. So in the case above, it is the value 22 and 6. Start index of the repeated 22 is 3 and end-index is 8. Same for the repeatening 6. Is there a special tool in Python that is helpful? Otherwise, I would loop through the array index for index and compare the actual value with the previous.
致谢.
推荐答案
在此处使用np.diff
和给定的方法@WarrenWeckesser撰写,用于查找数组中的零游程:
Using np.diff
and the method given here by @WarrenWeckesser for finding runs of zeros in an array:
import numpy as np
def zero_runs(a): # from link
iszero = np.concatenate(([0], np.equal(a, 0).view(np.int8), [0]))
absdiff = np.abs(np.diff(iszero))
ranges = np.where(absdiff == 1)[0].reshape(-1, 2)
return ranges
a = [34,2,3,22,22,22,22,22,22,18,90,5,-55,-19,22,6,6,6,6,6,6,6,6,23,53,1,5,-42,82]
zero_runs(np.diff(a))
Out[87]:
array([[ 3, 8],
[15, 22]], dtype=int32)
然后可以根据开始&运行结束:
This can then be filtered on the difference between the start & end of the run:
runs = zero_runs(np.diff(a))
runs[runs[:, 1]-runs[:, 0]>5] # runs of 7 or more, to illustrate filter
Out[96]: array([[15, 22]], dtype=int32)
这篇关于查找数组中重复元素的索引(Python,NumPy)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!