将蒙版阵列 2d 应用到 3d

Posted

技术标签:

【中文标题】将蒙版阵列 2d 应用到 3d【英文标题】:Apply Mask Array 2d to 3d 【发布时间】:2015-05-23 19:41:30 【问题描述】:

我想将 2 维掩码(NxM 数组)应用于 3 维数组(KxNxM 数组)。我该怎么做?

2d = 纬度 x 经度

3d = 时间 x 纬度 x 经度

import numpy as np

a = np.array(
    [[[ 0,  1,  2],
      [ 3,  4,  5],
      [ 6,  7,  8]],

     [[ 9, 10, 11],
      [12, 13, 14],
      [15, 16, 17]],

     [[18, 19, 20],
      [21, 22, 23],
      [24, 25, 26]]])

b = np.array(
    [[ 0, 1, 0],
     [ 1, 0, 1],
     [ 0, 1, 1]])

c = np.ma.array(a, mask=b)  # this behavior is wanted 

【问题讨论】:

【参考方案1】:

有很多不同的方法可供选择。您要做的是将(较低维度的)掩码与具有额外维度的数组对齐:重要的是您使两个数组中的元素数量相同,如第一个示例所示:

np.ma.array(a, mask=np.concatenate((b,b,b)))  # shapes are (3, 3, 3) and (9, 3)
np.ma.array(a, mask=np.tile(b, (a.shape[0],1)))  # same as above, just more general as it doesn't require you to specify just how many times you need to stack b.
np.ma.array(a, mask=a*b[np.newaxis,:,:])  # used broadcasting

【讨论】:

以上是关于将蒙版阵列 2d 应用到 3d的主要内容,如果未能解决你的问题,请参考以下文章

水平堆栈2d Numpy阵列与3d Numpy阵列

如何将蒙版应用于保存图像(swift3)

OpenCV - 将蒙版应用于彩色图像

将1D阵列添加到现有2D阵列

vbscript 将ADO Recordset复制到2D阵列

将 2D 纹理阵列的单层从 GPU 复制到 CPU