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

如何仅沿第二维度使用np.diagflat?遇TypeError报错求助

解决将二维数组每行转为对角矩阵的TypeError问题

错误原因

你调用np.apply_along_axis时参数顺序搞反了,这个函数的正确语法是:

np.apply_along_axis(func1d, axis, arr, *args, **kwargs)

你把数组x_train和轴参数1的位置写反了,导致numpy误将数组当成轴索引处理,触发了TypeError。

解决方案

方法1:修正apply_along_axis参数顺序

调整参数位置后即可正常运行:

import numpy as np

x_train = np.random.rand(5094, 512)  # 示例数据
x_train_diag = np.apply_along_axis(np.diagflat, 1, x_train)
print(x_train_diag.shape)  # 输出 (5094, 512, 512)

方法2:更高效的向量化实现(推荐)

apply_along_axis本质是循环,处理大数据量时效率偏低。可以用numpy向量化操作直接构造对角矩阵:

x_train_diag = np.zeros((5094, 512, 512))
# 利用索引填充对角线
idx = np.arange(512)
x_train_diag[:, idx, idx] = x_train

或者结合np.eye实现广播运算:

x_train_diag = x_train[:, :, np.newaxis] * np.eye(512)

这两种方法能直接生成目标形状的数组,且运行速度远快于apply_along_axis。

验证效果

如果输入是全1数组:

x_train = np.ones((5094, 512))
x_train_diag = x_train[:, :, np.newaxis] * np.eye(512)
print(x_train_diag[0])  # 输出512x512的单位矩阵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:06