从在MATLAB矩阵的阵列创建的对角矩阵(Creating diagonal matrix from

2019-09-30 11:32发布

我感兴趣的是如何创建一个从矩阵阵列的对角矩阵。 我创建矩阵的阵列在MATLAB:

X<62x62x1000>它包括1000点矩阵尺寸为62x62

我想创建尺寸62000x62000的矩阵与来自阵列X 1000点的子矩阵沿主对角线。

你有任何线索如何做到这一点,除了M=blkdiag(X(:,:,1), X(:,:,2), X(:,:,3)...)因为这将是多写。

Answer 1:

一个可能的解决方案

M = kron(speye(1000),ones(62));
M(logical(M)) = X(:);

kron一个62000 * 62000稀疏矩阵M创建包含在其对角线上的人的1000个块,然后用元件更换那些X



Answer 2:

您可以通过扁平化的输入矩阵为列向量(:)索引,然后将它传递给diag以沿对角线一个新的矩阵的这些元素。

result = diag(X(:))

这将在命令列主顺序(默认为MATLAB)沿对角线的元素。 如果你想要一个不同的排序,你可以用permute来之前压扁重新排序的尺寸。

请注意,您得到的矩阵将是相当大的这一点很重要。 你可以使用spdiags ,而不是创建一个稀疏对角矩阵

spdiags(X(:), 0, numel(X), numel(X))


Answer 3:

一个很有争议的eval调用可以解决这个问题很懒惰,但我怀疑有一个更好的方法来做到这一点:

evalstring = ['M=blkdiag('];
for i = 1:999
    evalstring = [evalstring, 'X(:,:,', num2str(i),'),'];
end
evalstring = [evalstring, 'X(:,:,1000));'];
eval(evalstring);


文章来源: Creating diagonal matrix from array of matrices in MATLAB