首页 > 解决方案 > 基于另一个数组替换numpy数组中的数字

问题描述

我有一个目标数组/向量,它是 1 和 0 的组合。它是稀疏的(6%,其余为 0),但当有 1 时,通常连续有 3 个左右。目标数组的示例 = [1,1,0,0,0,1,1,1,0,...]。

我还有一个与上述目标数组具有相同行数的矩阵。矩阵的每一列也用 1 和 0 填充。对于每一列,我希望在目标数组中有 1 的每个“区域”中只有一个 1。

例如,如果矩阵中的第一列是 [1,1,0,1,0,0,1,1,0,...] 那么这将变为 [1,0,0,1,0,0 ,1,0,0,...] 基于前面给出的示例目标数组。

请注意,在目标数组中的每个 1 的“区域”内,仅保留该列区域中的第一个 1。另请注意,“区域”之外的列中的 1 不受影响。

如何有效地在 numpy 中执行此操作?非常感谢任何帮助:) 谢谢!

标签: pythonnumpymatrixvectorbinary

解决方案


你可以试试这段代码:

import numpy as np

mask=np.array([1,1,0,0,0,1,1,1,0], dtype=np.uint8)
col=np.array([1,1,0,1,0,0,1,1,0], dtype=np.uint8)
part1=~mask&col
part2=np.uint8(np.diff(np.insert(mask&col,0,0))==1)
res=part1|part2
print(res)

推荐阅读