python - Numpy 在索引周围创建掩码数组的最快方法

标签 python arrays algorithm numpy

我有一个一维数组:

arr = np.array([0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 1, ...], dtype='uint16')

我想创建一个 mask 数组,该数组在任何大于 2 的值的 +/- N 索引处都为 True,产生以下结果(对于 N=3)

mask = [F, T, T, T, T, T, T, T, F, F, T, T, T, T, T, T, T, F, F, F, T, T, T, T, T, T, T, ...]

(注意,为了便于阅读,我使用了 T/F)

我需要这个速度相当快,因为​​我的实际数组有数百万个点长,N 可能约为 500。

编辑:similar problem

最佳答案

找到大于2的元素,然后将它们周围的元素设置为True:

a = np.array([0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0])

N = 3
mask = a > 2
center = np.where(mask)[0]
mask[np.maximum(np.ravel(center - np.arange(1, 1 + N).reshape(-1, 1)), 0)] = True
mask[np.minimum(np.ravel(center + np.arange(1, 1 + N).reshape(-1, 1)), len(a)-1)] = True

感谢@Michael Szczesny 指出了边缘情况。 最大值最小值确保索引不会(无意中)超出范围。

关于python - Numpy 在索引周围创建掩码数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72310246/

相关文章:

python - 如何在运行 setup.py 后重命名 cx_Freeze 中的 exe.win-amd64-3.8 文件夹

ios - 将字符串与数组一起传递,但使用 Alamofire 在 swift 中将字符串读取为 null

algorithm - Excel图表平滑算法

python - 如何让 SciPy.integrate.odeint 在路径关闭时停止?

python - 从字典列表中提取值

python - append Python 3D Numpy 数组

android - android中的交叉数算法

检查数组中是否存在元素的算法复杂度

python - 将字符串列表转换为数值向量以计算汉明距离

java - Java中的赋值运算符