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秒)。有没有一种更有效的方式来获取合并数组的替代方法?
不要使用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 数组。