我有一個可能有重複的整數的整數數組。我想計算連續的相等值,當值與前一值不同時,從零開始重新計數。這是預期的結果實現了簡單的Python循環:numpy:累計重複次數
import numpy as np
def count_multiplicities(a):
r = np.zeros(a.shape, dtype=a.dtype)
for i in range(1, len(a)):
if a[i] == a[i-1]:
r[i] = r[i-1]+1
else:
r[i] = 0
return r
a = (np.random.rand(20)*5).astype(dtype=int)
a.sort()
print "given sorted array: ", a
print "multiplicity count: ", count_multiplicities(a)
輸出:
given sorted array: [0 0 0 0 0 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4]
multiplicity count: [0 1 2 3 4 0 1 2 0 1 2 3 0 1 2 3 0 1 2 3]
我怎樣才能得到相同的結果,用numpy的一種有效的方法是什麼?陣列非常長,但重複只是少數(不超過10次)。
在我的特殊情況下,我也知道值從零開始,並且連續值之間的差值爲0或1(值中沒有差距)。
進一步的想法:也許一個可能的解決方案可以通過使用與給定對角線和上對角線的良好選擇矩陣的乘法來實現。 –