使用
然而,这种方法不能简单地扩展到查找2个新元素。
numpy
或itertools
,有没有一种有效的方法来确定下一个非连续元素的距离。> import numpy as np
> a=np.array(['a','b','b','c','d','a','b','b','c','c','c','d'])
我希望输出结果如下:
[1, 2, 1, 1, 1, 1, 2, 1, 3, 2, 1]
进一步地,我想要计算到两个新元素的距离。期望的输出结果应该是:
[3, 3, 2, 2, 2, 3, 5, 4]
因为在 a
之后有两个新元素 b
和 c
以此类推。
编辑 1 我有两个版本来查找下一个新元素:
import numpy as np
a = np.array(['a', 'b', 'b', 'c', 'd', 'a', 'b', 'b', 'c', 'c', 'c', 'd'])
# Using numpy
u, idx = np.unique(a, return_inverse=True)
idx = np.diff(idx)
idx[idx < 0] = 1
idx[idx > 1] = 1
count = 1
while 0 in idx:
idx[np.diff(idx) == count] = count+1
count += 1 │
print idx
# Using loop
oldElement = a[0]
dist = []
count = 1
for elm in a[1:]:
if elm == oldElement:
count += 1
else:
dist.extend(range(count, 0, -1))
count = 1
oldElement = elm
print dist
然而,这种方法不能简单地扩展到查找2个新元素。
np.array(['a', 'a', 'a'])
的预期输出是什么? - Cory Kramer['a','b','a','b']
的输出应该是什么? - shx2