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

如何用Numpy创建指定形状的随机元素对角矩阵

在Numpy中创建指定形状的批量对角矩阵

核心思路

利用Numpy的高级索引直接定位所有子矩阵的对角线位置,一次性填充随机值,完全无需循环,效率远高于逐个子矩阵处理。

实现代码

基础实现(直观易读)

import numpy as np

# 定义目标数组形状:(外层维度1, 外层维度2, 矩阵行数, 矩阵列数)
target_shape = (3, 2, 4, 4)
# 初始化全零数组
F = np.zeros(target_shape)
# 生成对应数量的随机值,赋值给所有子矩阵的对角线
# 随机值形状为(3,2,4),与对角线位置的维度完全匹配
F[:, :, np.arange(4), np.arange(4)] = np.random.rand(3, 2, 4)

验证示例(用有序数值替代随机数)

如果需要验证结构是否符合预期,可以用有序数值填充:

F = np.zeros((3,2,4,4))
# 用0-23的连续整数填充对角线,对应你示例中的a-x
F[:, :, np.arange(4), np.arange(4)] = np.arange(24).reshape(3,2,4)

执行后,F[0,0]的对角线为[0,1,2,3],F[0,1]的对角线为[4,5,6,7],完全匹配你给出的矩阵结构。

原理说明

  • np.arange(4)生成索引序列[0,1,2,3],F[:, :, np.arange(4), np.arange(4)]会同时选中所有6个4x4子矩阵的对角线位置(每个子矩阵的(i,i)位置)。
  • 右侧的随机数组形状为(3,2,4),与对角线位置的维度完全对齐,Numpy会自动完成广播赋值,无需手动遍历每个子矩阵。

极简写法(一行完成)

如果追求代码简洁,可合并为一行:

import numpy as np
F = np.zeros((3,2,4,4))
F[:, :, np.arange(4), np.arange(4)] = np.random.rand(3,2,4)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:42:46