【问题标题】:Replace multidimensional array with different array on condition (Python3.x)根据条件用不同的数组替换多维数组(Python3.x)
【发布时间】:2021-10-25 16:38:54
【问题描述】:

我在 Python 3.9 中有三个多维数组,我想在第三个条件下用第二个数组的值替换一个数组的值。所以:

Array1 = [[[4, 2, 3], [1, 0, 10], [7, 4, 6]],
          [[8, 7, 95], [3, 5, 22], [0, 7, 0]],
          [[5, 0, 60], [5, 230, 70], [6, 76, 30]]]
Array2 = [[[12, 3, 4], [4, 55, 0], [0, 5, 76]],
          [[34, 60, 76], [40, 430, 0], [4, 0, 11]],
          [[2, 34, 0], [1, 0, 0], [76, 4, 77]]]
Mask = [[[0, 1, 0], [1, 0, 0], [1, 0, 0]],
        [[0, 1, 0], [0, 1, 1], [1, 1, 1]],
        [[1, 0, 1], [1, 0, 0], [1, 1, 0]]]

我想用第二个数组的值替换第一个数组中的值,如果在掩码数组中的相同位置,值为1。所以结果应该是:

Array1 = array([[[  4,   3,   3],
                 [  4,   0,  10],
                 [  0,   4,   6]],

                [[  8,  60,  95],
                 [  3, 430,   0],
                 [  4,   0,  11]],

                [[  2,   0,   0],
                 [  1, 230,  70],
                 [ 76,   4,  30]]])

有什么方法可以使用不需要我遍历整个数组的快速(numpy)命令吗?实际上,整个数组的大小为 (1500,2500,4),因此需要进行相当多的处理。

提前发送

【问题讨论】:

  • 三个列表的长度是否总是相同的?
  • 是的,它们的长度完全相同。标记答案解决了我的问题。不过还是谢谢。

标签: python python-3.x numpy


【解决方案1】:

np.where 就是这样做的:

np.where(Mask, Array2, Array1)

输出:

array([[[  4,   3,   3],
        [  4,   0,  10],
        [  0,   4,   6]],

       [[  8,  60,  95],
        [  3, 430,   0],
        [  4,   0,  11]],

       [[  2,   0,   0],
        [  1, 230,  70],
        [ 76,   4,  30]]])

【讨论】:

  • 这很好用。我不知道 numpy.where 函数可以处理像布尔数组一样的掩码数组。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多