从三维NumPy数组生成二维数组:提取最上层活跃层编号
解决方案
可以直接用NumPy的argmax函数实现需求:它会沿着指定轴返回第一个最大值的索引——由于你的数组元素只有0和1,第一个出现的1就是最大值,对应的索引就是你要的最上层活跃层号;如果某个位置全为0,argmax会返回0,刚好符合你要求的结果。
代码示例
import numpy as np # 构造你给出的示例三维数组 example_3d = np.array([ [[0., 1., 0., 0.], [1., 0., 0., 0.], [1., 0., 0., 0.]], [[0., 1., 1., 0.], [1., 1., 0., 0.], [1., 1., 0., 0.]], [[0., 0., 1., 1.], [0., 1., 1., 0.], [0., 1., 1., 0.]], [[0., 0., 1., 1.], [0., 1., 1., 1.], [0., 1., 1., 1.]] ]) # 沿着层的维度(轴0)取第一个1的层号 result_2d = np.argmax(example_3d, axis=0) print(result_2d)
运行后输出:
[[0 0 1 2] [0 1 2 3] [0 1 2 3]]
和你预期的结果完全一致。
针对你的实际数据
你的三维数组维度是(39, 279, 153),层是第一个维度,直接复用上述逻辑即可:
# 假设你的三维数组名为model_domain result = np.argmax(model_domain, axis=0)
为什么求和/平均方案不行
求和是统计每个位置激活的总层数,平均是激活层的层数平均值,这两个都无法定位到第一个激活的层,自然得不到你要的结果。
内容的提问来源于stack exchange,提问作者jgomn
相关产品推荐
相关产品推荐

