在MATLAB中从矩阵数组创建对角矩阵

时间:2016-11-15 16:20:19

标签: arrays matlab matrix diagonal

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

X<62x62x1000>它由1000个矩阵组成,其尺寸为62x62

我想创建一个尺寸为62000x62000的矩阵,其中1000个子矩阵来自阵列X沿主对角线。

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

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);