使用可变长度的布尔变量序列作为索引来划分数组

计算科学 Python
2021-12-11 13:09:47

我有一个布尔变量数组。数组有一种结构,它由许多 0 和 1 的序列、不同长度的序列组成。如:

[111111110000111111111100000000000000111111100000011111111111111110000]

“值之间省略逗号”

我需要以这种方式将其分开

[111111110000],[111111111100000000000000],[1111111000000],[111111111111111110000]

有人知道一个好方法还是只是一种方法?

算法可以是无语言的,但如果你知道如何在 python 中做到这一点,欢迎你。

经过一番挣扎,我找到了一种划分数组的方法,但前提是它以 ONES 开头。我真的不知道如何使它与以 1 或 0 开头的数组一起工作。

import numpy as np

x = np.asarray([1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0])

c = 1

for i in range(len(x)):
    if x[i] == 1:
        if c == 0:
            print "\n\tDIVIDE\n"
            c = 1
        print "one"

    else:
        if c == 1:
            c = 0
        print "zero"
1个回答

获取要拆分的索引:

>>> np.diff(x)
array([ 0,  0, -1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0, -1,  0,  1,  0,  0, -1,  0,  0,  0,  0,  0,  1,
        0,  0,  0, -1,  0,  0])

Every1表示从0到的变化1

应用它(当然移动一个索引):

>>> np.split(x, np.nonzero(np.diff(x) == 1)[0]+1)
[array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]), array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]), array([1, 1, 1, 0, 0, 0, 0, 0, 0]), array([1, 1, 1, 1, 0, 0, 0])]