合并两个Numpy蒙版数组的有效方法

prl*_*900 5 python numpy mask multidimensional-array array-merge

我有两个要合并的numpy蒙版数组。我正在使用以下代码:

import numpy as np

a = np.zeros((10000, 10000), dtype=np.int16)
a[:5000, :5000] = 1
am = np.ma.masked_equal(a, 0)

b = np.zeros((10000, 10000), dtype=np.int16)
b[2500:7500, 2500:7500] = 2
bm = np.ma.masked_equal(b, 0)

arr = np.ma.array(np.dstack((am, bm)), mask=np.dstack((am.mask, bm.mask)))
arr = np.prod(arr, axis=2)
plt.imshow(arr)
Run Code Online (Sandbox Code Playgroud)

生成的合并数组的图

问题是np.prod()操作非常慢(在我的计算机中为4秒)。有没有一种更有效的方式来获取合并数组的替代方法?

Joh*_*nck 3

不要使用dstack()and的最后两行prod(),而是尝试以下操作:

arr = np.ma.array(am.filled(1) * bm.filled(1), mask=(am.mask * bm.mask))
Run Code Online (Sandbox Code Playgroud)

现在您根本不需要prod(),并且可以完全避免分配 3D 数组。