【发布时间】:2020-09-30 08:56:14
【问题描述】:
我知道如何从 numpy 数组中找到重复项的数量。 但是,我需要仅在 numpy 数组 的末尾 找到重复项的数量。 请参阅下面的示例:
输入示例如下:
1995
1996
1996
1997
1998
1999
1999
1999
期望的输出:
3
提前致谢!
【问题讨论】:
标签: python arrays numpy duplicates
我知道如何从 numpy 数组中找到重复项的数量。 但是,我需要仅在 numpy 数组 的末尾 找到重复项的数量。 请参阅下面的示例:
输入示例如下:
1995
1996
1996
1997
1998
1999
1999
1999
期望的输出:
3
提前致谢!
【问题讨论】:
标签: python arrays numpy duplicates
这是np.minimum.accumulate 的一种方式-
np.minimum.accumulate(a[::-1]==a[-1]).sum()
示例运行 -
In [64]: a
Out[64]: array([2, 1, 9, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 1, 0, 9, 9, 9, 9, 9])
In [73]: np.minimum.accumulate(a[::-1]==a[-1]).sum()
Out[73]: 5
另一个argmin -
In [88]: (a[::-1]==a[-1]).argmin()
Out[88]: 5
对于极端情况,如果所有元素都相同,我们可能需要一个额外的步骤来检查 a[::-1]==a[-1] 上的 all 匹配并在这种情况下返回 len(a)。或者如果计数是0,不能作为输出,我们将输出len(a)。
【讨论】:
only at the end of the numpy array 意图,我们想跳过与最后一个元素匹配的中间元素。
mylist = [1995,
1996,
1996,
1997,
1998,
1999,
1999,
1999]
s = 0
x = mylist[-1]
for i in mylist:
if i == x: s+= 1
print(s)
【讨论】:
我的解决方案如下,但是,我确信有一个更优雅的解决方案!
def get_numlastdups(my_nparray):
numlastdups=0
for i in range(2,len(my_nparray)):
if my_nparray[-1]==my_nparray[-i]: numlastdups+=1
else: break
return numlastdups
【讨论】: