如何在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
相关产品推荐
相关产品推荐

