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

删除形状为(128,116,116,1)的4D数组对角元素的代码如何修正?

问题原因

你的现有代码存在三个核心问题:

  • 循环内每次都直接覆盖X_test_LRP变量,最终只会保留最后一个样本的处理结果,自然形状只有(116,115)
  • 处理后没有保留样本维度和最后的通道维度,无法得到4D结构
  • 循环遍历单个样本的写法效率极低,numpy支持广播操作直接批量处理整个数组

高效无循环解决方案

你可以直接通过掩码广播实现需求,最终输出形状为(128, 116, 115, 1)的4D数组:

import numpy as np

# 生成116x116的对角掩码,对角位置标记为True
diag_mask = np.eye(116, dtype=bool)
# 扩展掩码维度匹配4D数组,过滤对角元素后重新reshape为4D结构
X_test_LRP = X_test[~diag_mask[np.newaxis, :, :, np.newaxis]].reshape(128, 116, 115, 1)

原有循环写法修正

如果你坚持要使用循环实现,可以提前初始化结果数组,每次循环给对应样本位置赋值:

# 提前初始化4D结果数组
X_test_LRP = np.zeros((X_test.shape[0], 116, 115, 1), dtype=X_test.dtype)
for teste in range(X_test.shape[0]):
    single_sample = X_test[teste, :, :, 0]
    # 去掉对角元素后reshape,赋值到结果数组对应位置
    X_test_LRP[teste, :, :, 0] = single_sample[~np.eye(116, dtype=bool)].reshape(116, 115)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:09:02