我感兴趣的是如何从矩阵数组创建对角矩阵。 我在MATLAB中创建了一个矩阵数组:
X<62x62x1000>
它由1000个矩阵组成,其尺寸为62x62
我想创建一个尺寸为62000x62000的矩阵,其中1000个子矩阵来自阵列X沿主对角线。
你是否有任何线索如何做到这一点,除了M=blkdiag(X(:,:,1), X(:,:,2), X(:,:,3)...)
,因为这将是写作。
答案 0 :(得分:1)
可能的解决方案
M = kron(speye(1000),ones(62));
M(logical(M)) = X(:);
使用kron
创建一个62000 * 62000稀疏矩阵M
,其对角线上包含1000个块,然后用X
元素替换它们。
答案 1 :(得分:0)
您可以使用(:)
索引将输入矩阵展平为列向量,然后将其传递给diag
,以便将这些元素放在新矩阵的对角线上。
result = diag(X(:))
这将按照列主要顺序沿对角线排序元素(MATLAB的默认值)。如果您想要不同的排序,可以在展平之前使用permute
重新排序尺寸。
重要的是要注意你的结果矩阵会非常大。您可以使用spdiags
来创建稀疏对角矩阵
spdiags(X(:), 0, numel(X), numel(X))
答案 2 :(得分:0)
一个非常有争议的评估电话可以解决这个问题,虽然我怀疑有更好的方法可以解决这个问题:
evalstring = ['M=blkdiag('];
for i = 1:999
evalstring = [evalstring, 'X(:,:,', num2str(i),'),'];
end
evalstring = [evalstring, 'X(:,:,1000));'];
eval(evalstring);