How to convert matrix to a stack of diagonal matrices based on every row?

后端 未结 5 1734
既然无缘
既然无缘 2021-01-20 10:52

I have a matrix:

A = [1 1 1
     2 2 2
     3 3 3]

Is there a vectorized way of obtaining:

B = [1 0 0 
     0 1 0
     0 0          


        
5条回答
  •  忘掉有多难
    2021-01-20 11:21

    Edit: I guess thewaywewalk's benchmark leaves me only with a readability argument ;)

    Edit using Beaker's suggestion:

    data = [1 1 1
         2 2 2
         3 3 3];
    sz = size(data);
    z = zeros(sz(1)*sz(2), sz(2));
    for i = 1 : sz(1)
        z((i-1)*sz(2)+1:i*sz(2), :) = diag(data(i, :));
    end
    

提交回复
热议问题