首页 > 解决方案 > 如何在由掩码指定的较大数组中的不同位置应用相同的一组值?

问题描述

我有一个 2DY维度N x N数组和一个K二进制掩码数组X,每个维度M x M(所以,X有 shape K x M x M)。中的每个二进制掩码X只有一个N x N补丁,其余元素为零。我想创建一个K x M x M数组Z,其中的元素Y位于 指定的位置X,其他任何地方都为零。

例如,如果M = 3, N = 2, K = 3, 和

X = [[[1., 1., 0.],
     [1., 1., 0.],
     [0., 0., 0.]],

    [[0., 1., 1.],
     [0., 1., 1.],
     [0., 0., 0.]],

    [[0., 0., 0.],
     [0., 1., 1.],
     [0., 1., 1.]]]

Y = [[0.1, 0.2],
    [0.3, 0.4]]

那么Z应该是

Z = [[[0.1, 0.2, 0.],
     [0.3, 0.4, 0.],
     [0., 0., 0.]],

    [[0., 0.1, 0.2],
     [0., 0.3, 0.4],
     [0., 0., 0.]],

    [[0., 0., 0.],
     [0., 0.1, 0.2],
     [0., 0.3, 0.4]]]

我想使用 Numpy 或 Pytorch 的函数来做到这一点。numpy.where()我认为使用, 也许可以做到这一点

Z = numpy.zeros((3,3,3))
Z[numpy.where(X == 1)] = Y

但这会产生形状不匹配错误。

什么是最简洁和最有效的方法(除了显式使用循环来设置值)?

标签: pythonarrayspython-3.xnumpymask

解决方案


尝试这个:

X[X == 1] = np.tile(Y.flatten(), X.shape[0])

推荐阅读