如何从分页数组以有效的方式创建块对角稀疏矩阵?

3次浏览(过去30天)
如何从分页数组以有效的方式创建块对角稀疏矩阵?原始数组是一个三维数组,其中第三维范围贯穿页面,每个页面包含块对角矩阵的一个块。

接受的答案

MathWorks支万博1manbetx援小组
你可以使用“repmat”,“重塑”和“转置”操作创建这样一个矩阵,通过以下代码:
样本分页矩阵
m = 3; n = 2; p = 4;
A = rand(m,n,p);
以下代码通过repmat、重塑和转置操作创建索引
I2 = repmat((1:m)',1,n);
I3 = repmat(I2,1,1,p);
If = repmat((0:m:(p-1)*m),m*n,1);I = I3 +重塑(If,m,n,p);
J2 = repmat((1:n),m,1);
J3 = repmat(J2,1,1,p);
Jf = repmat((0:n:(p-1)*n)',1,m*n)';J = J3 +重塑(Jf,m,n,p);
创建稀疏矩阵
S = sparse(I(:),J(:),A(:)))
如果您使用的是MATLAB R2016b或最新版本,则可以通过隐式展开来简化此代码
m = 3; n = 2; p = 4;
A = rand(m,n,p);
我= repmat ((1: m), 1, n) +交换(m * (0: p - 1), [3 1 2]);
J = repmat (1: n, m, 1) +交换(n * (0: p - 1), [3 1 2]);
S = sparse(I(:), J(:), A(:)))

更多答案(0)

类别

了解更多启动和关机帮助中心而且文件交换

s manbetx 845


释放

R2016b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!