Numpy 如果值在数组中重复,则删除它们
我有一个类似的数组Numpy 如果值在数组中重复,则删除它们,numpy,Numpy,我有一个类似的数组 [0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0] 我想确定非零间隔的数量。当然,我知道如何在for循环中做到这一点,但我想知道是否有一个很好的numpy解决方案 我正在寻找的方法是假设每当一个值自身重复时就“折叠”数组。因此,上面的数组将成为示例 [0,1,0,1,0] 为了计算的缘故,只返回一次就足够了 [1,1] 但是我想知道一种通用的方法,它也可以处理两个以上不同的元素,比如 [1,1,1,2,2,2,3,3,0,0,1,1,2,2] 大约如此
[0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0]
我想确定非零间隔的数量。当然,我知道如何在for循环中做到这一点,但我想知道是否有一个很好的numpy
解决方案
我正在寻找的方法是假设每当一个值自身重复时就“折叠”数组。因此,上面的数组将成为示例
[0,1,0,1,0]
为了计算的缘故,只返回一次就足够了
[1,1]
但是我想知道一种通用的方法,它也可以处理两个以上不同的元素,比如
[1,1,1,2,2,2,3,3,0,0,1,1,2,2]
大约如此。一个选项是在布尔索引发生更改时拾取值:
import numpy as np
a = np.array([1,1,1,2,2,2,3,3,0,0,1,1,2,2])
a[np.concatenate(([True], np.diff(a) != 0))]
# array([1, 2, 3, 0, 1, 2])
np.count_nonzero(a[np.concatenate(([True], np.diff(a) != 0))])
# 5
第一种情况:
b = np.array([0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0])
b[np.concatenate(([True], np.diff(b) != 0))]
# array([0, 1, 0, 1, 0])
np.count_nonzero(b[np.concatenate(([True], np.diff(b) != 0))])
# 2