【问题标题】:Substituting all single-non-zero and double-consecutive-non-0 values with 0 in a 3D array without using loops in python用 0 替换 3D 数组中的所有单非零和双连续非 0 值,而不在 python 中使用循环
【发布时间】:2020-11-28 02:55:07
【问题描述】:

假设 M(i,j,k) 是一个 3-D 数组,具有一些非 0 值和许多零值。我想保留所有至少三个连续的非 0 值,所有其他不满足此条件的非 0 值必须替换为 0。即:

M(:,1,1)=[8,0,1,2,0,3,3,2,0,0,4,7,6,4,0,1,0,2] 

应该改为:

M(:,1,1)=[0,0,0,0,0,3,3,2,0,0,4,7,6,4,0,0,0,0] 

这个过程应该在 j 和 k 之间完成,而不需要循环,因为 M 非常大。

【问题讨论】:

    标签: python loops large-data substitution


    【解决方案1】:
    `import pandas as pd
    df_test=pd.DataFrame([8,0,1,2,0,3,3,2,0,0,4,7,6,4,0,1,0,2])
    df_mask=df_test > 0
    df_pass1=df_mask.rolling(3,center=True).sum().mask(~df_mask,0).fillna(0)
    df_pass2=df_pass1.rolling(3,center=True).sum().fillna(0)
    df_mask2=df_pass2 >= 5
    df_test.mask(~df_mask2,0)`
    

    如果三个或更多非零值的序列包括数组中的第一个或最后一个值,我们可以在数组的开头和结尾都添加一个 0,然后在所有操作完成后删除它们。

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 2021-11-10
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2020-02-21
      • 1970-01-01
      相关资源
      最近更新 更多