如何查找3D numpy mask数组中非零元素最多的z轴切片
实现方案
直接用numpy的向量化操作替代Python循环,一行代码即可实现,运行效率远高于朴素循环,数组维度越大性能优势越明显:
best_z = np.argmax(np.count_nonzero(mask, axis=(0, 1)))
逻辑说明
np.count_nonzero指定axis=(0,1)参数,会直接沿着前两个维度(x、y轴)统计每个z轴切片的非零元素数量,得到长度等于z轴长度的一维数组- 套入
np.argmax即可直接取出最大值对应的索引,和你原有循环的逻辑完全一致:如果有多个z切片的非零元素数量同为最大值,会返回第一个出现的z值。
小提示:如果你的mask本身是布尔类型数组,也可以写成
best_z = np.argmax(mask.sum(axis=(0,1))),运行效率基本一致,不过np.count_nonzero的语义更贴合需求,对非布尔类型的mask也能正确统计。
内容的提问来源于stack exchange,提问作者Omroth
相关产品推荐
相关产品推荐

