我有一个n×m矩阵,我想转换为mn×m矩阵,结果的每个m×m块都包含每一行的对角线。
例如,如果输入是:
[1 2; 3 4; 5 6]
输出应为:
[1 0; 0 2; 3 0; 0 4; 5 0; 0 6]
当然,我不想用
for
循环一步一步地组装矩阵。是否有 vector 化和简单的方法来实现这一目标?
最佳答案
对于执行此操作的 vector 化方法,将对角元素的线性索引创建到结果矩阵中,然后直接分配。
%# create some input data
inArray = [10 11;12 13;14 15];
%# make the index array
[nr,nc]=size(inArray);
idxArray = reshape(1:nr*nc,nc,nr)';
idxArray = bsxfun(@plus,idxArray,0:nr*nc:nr*nc^2-1);
%# create output
out = zeros(nr*nc,nc);
out(idxArray) = inArray(:);
out =
10 0
0 11
12 0
0 13
14 0
0 15
关于matlab - 如何向量化矩阵的逐行对角化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11034837/