条件下的 Python block 数组

标签 python numpy

我想在特定条件下从数组中创建 block 。 假设我想要所有不为空的 block 。

array = np.random.randint(2, size=10)
# array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])

out = chunks(array)
# array([[0,[1]],[4,[1, 1]],[8,[1]])

现在我知道第一个 block 从索引 0 开始并包含 [1]

0: 0 -> [1]
1: 4 -> [1,1]
2: 8 -> [1]

它不必看起来像这样, 但我不知道更好。 到目前为止,我已经用 for 循环完成了。 但每次我看我的代码时,它都让我很沮丧 :)。

有没有更好的方法(Numpy magic)?

最佳答案

试穿这件尺码:)

使用np.where进行过滤,使用np.diffnp.split对连续索引进行分组。

import numpy as np
array = np.array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])
idx_matching_1 = np.where(array == 1)[0]
consecutive_groups_of_1_idx = np.split(idx_matching_1, np.where(np.diff(idx_matching_1) != 1)[0] + 1)
print(consecutive_groups_of_1_idx)


[array([0]), array([4, 5]), array([8])]

关于条件下的 Python block 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50551776/

相关文章:

Python UTF-8 无法在 32 位机器上解码字节

python - 为什么感知器学习算法不收敛?

python - 如何根据python中的第二列对二维数组(numpy.ndarray)进行排序?

python - 并发原子选择更新

python - model.summary() 在使用子类模型时无法打印输出形状

python - 在 OpenMDAO 1.x 中链接来自两个组的 IndepVarComp

python - 欧式距离的高效计算

python - 显示一个实时的 numpy 数组

python - 在 Python 中对二维数组进行部分 argsort

python - 调用 scipy RectBivariateSpline 的并行化