python - 基于另一个数组替换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 中执行此操作?非常感谢任何帮助:) 谢谢!
解决方案
你可以试试这段代码:
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)
推荐阅读
- c# - 如何在 Visual Studio 2019 模板列表中安装 DevExtreme 应用程序如下
- python-3.x - 最少共同祖先的 Python 单元测试给出 TypeError: 'int' object is not callable
- apache-spark - 火花简单的选择工作很慢
- r - 在 Shiny R 中按文件输入的 Worcloud
- scala - 类方法隐式参数的默认值
- environment-variables - 使用版本 0.22.1 错误时尝试从版本 0.19.1 中解开估计器 SVC
- css - 更多/更少分页角度的动画
- python - `rcond` 参数将更改为默认的机器精度乘以 ``max(M, N)`` 其中 M 和 N 是输入矩阵维度
- c# - 用户 ILogger
使用 Caliburn.Micro SimpleContainer - java - JMeter JMS 点对点采样器与 ActiveMQ