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

如何在Matlab中高效创建分块移位稀疏矩阵

高效构造目标稀疏矩阵的方案

首先拆解原表达式的结构:sparse(kron(eye(a),ones(1,b)).*repmat(t,1,b))生成的是a×(a*b)的稀疏矩阵,每行包含b个非零元素,对应t中某一行的特定列元素。直接构造中间稠密矩阵会占用过量内存,因此我们可以通过直接生成稀疏矩阵的行、列、值向量来规避这个问题。

步骤1:生成行索引向量

每行重复b次,对应每行的b个非零元素:

row = repmat((1:a)', b, 1);

步骤2:生成列索引向量

第i行的非零元素列位置为(i-1)*b + 1到i*b,通过向量运算快速生成:

col = reshape((0:a-1)'*b + (1:b), [], 1);

步骤3:生成值向量

根据原表达式的点乘逻辑,列位置c对应t的列索引为mod(c-1, a)+1,直接提取对应值:

t_col = mod(col - 1, a) + 1;
val = t(row, t_col);

如果是你给出的特定参数a=12*2^10、b=2^10(即a=12b),还可以用更高效的方式提取值:

r = mod(0:a-1, 12);
col_t = r'*b + (1:b);
row_t = repmat(1:a, b, 1)';
val = t(row_t + (col_t - 1)*a);

步骤4:构造稀疏矩阵

用sparse函数直接生成目标矩阵:

P = sparse(row, col, val, a, a*b);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:28:11