计算1D numpy数组中的间隙数

jw5wzhpr  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(120)

我想计算一个numpy数组中的间隔数。在这个例子中,连续的零算作一个间隔。

array = np.array([   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        1692, 1692, 1692, 1692, 1692, 1692, 1692, 2458, 2458, 2458, 2458,
        2458, 2458, 2458,    0,    0,    0, 3956, 3956, 3956, 3956, 3956,
        3956, 3956,    0,    0,    0,    0, 5431, 5431, 5431, 5431, 5431,
        5431, 5431,    0,    0,    0,    0,    0,    0,    0,    0,    0])

在上面的数组中有4个间隙,所以我的输出应该是4。

fnx2tebb

fnx2tebb1#

您可以使用布尔数组,并在前一个值为False时计算为True的值:

a = array==0
(a&~np.r_[[False],a[:-1]]).sum()

输出:4

mm9b1k5b

mm9b1k5b2#

请查看已接受答案的优化版本(速度快2.5倍)。它之所以快,是因为不需要连接(np.r_)numpy数组

a = array == 0
(a[1:] & ~a[:-1]).sum() + a[0]

对比:

%%timeit
a = array == 0
(a&~np.r_[[False],a[:-1]]).sum()
    • 17.4 µ s ± 39.4 ns**/循环(7次运行的平均值±标准差,每次运行100000次循环)
%%timeit
a = array == 0
(a[1:] & ~a[:-1]).sum() + a[0]
    • 6.75 µ s ± 12.7 ns**/循环(7次运行的平均值±标准差,每次运行100000次循环)

相关问题