matlab - 如何向量化矩阵的逐行对角化

标签 matlab matrix octave vectorization

我有一个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/

相关文章:

matlab - 凹凸线未到达图像边缘

c - Matlab 2013b 生成的代码在 mex 中生成 Undefined symbols for architecture x86_64 错误

r - 使用 R 合并矩阵和向量

matlab - 在 Octave/Matlab 中将 1 行拆分为多行

Matlab 如何对向量和矩阵进行按位与运算?

matlab - 如何以编程方式更新直方图内容和数据提示位置? (MATLAB hg2)

c++ - 使用 CUDA 对矩阵进行按行/按列操作

java - 计算反射矩阵

arrays - 我有索引向量。如何在每一行的给定索引处设置一个?

matlab - Softmax 回归的向量化实现