You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效提取3D特征图的2D切片以实现内存友好的可视化

提取特征图切片(仅视图,无内存拷贝)

刚好处理过类似的需求,针对你这个形状为(32, 32, 96)的numpy特征图,要获取每个(32, 32)的切片视图非常简单,完全不需要额外拷贝内存,下面给你两种实用方法:

方法一:逐个遍历获取切片视图

如果需要逐个处理这些特征图切片,直接通过索引遍历第三个维度就行,拿到的都是原数组的视图:

import numpy as np

feature_map = np.random.randint(low=0, high=255, size=(32, 32, 96))

# 遍历所有96个特征图切片
for idx in range(feature_map.shape[-1]):
    # 这里拿到的slice_view是原数组的视图,没有内存拷贝
    slice_view = feature_map[:, :, idx]
    
    # 可以在这里直接做可视化操作,比如用matplotlib显示
    # import matplotlib.pyplot as plt
    # plt.imshow(slice_view, cmap='gray')
    # plt.show()
    
    # 验证是视图的小技巧:修改切片会同步到原数组
    # slice_view[0, 0] = 0
    # print(feature_map[0, 0, idx])  # 会输出0,说明确实是视图

方法二:一次性生成所有切片的视图集合

如果想一次性得到所有切片的视图集合,用np.moveaxis调整维度顺序就可以,这个操作完全不占额外内存:

# 将第三个维度(通道/特征图维度)移到第一个位置
# 得到形状为(96, 32, 32)的数组,每个元素都是原数组的视图
all_slices = np.moveaxis(feature_map, -1, 0)

# 现在all_slices[i]就是第i个(32,32)的特征图切片视图

这个方法更高效,尤其是当你需要批量处理所有切片的时候,np.moveaxis只是调整了数组的维度元信息,没有复制任何数据。

确认是视图的小验证

你可以随手验证一下:

all_slices[0][0, 0] = 255
print(feature_map[0, 0, 0])  # 输出255,说明修改切片会同步到原数组,确实是视图

这样操作既满足了可视化的需求,又不会浪费内存,特别适合处理大尺寸的特征图~

内容的提问来源于stack exchange,提问作者kmario23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:26:24