根据部分填充的向量形成"部分"单位矩阵

Pao*_*ani 2 arrays matlab vector matrix matrix-multiplication

我正在按照下面描述的方案在MATLAB中使用向量形成矩阵:

给定是x包含任意顺序的1和0 的向量,例如

x = [0 1 1 0 1]; 
Run Code Online (Sandbox Code Playgroud)

由此,我想形成一个矩阵Y,描述如下:

  • Ym行,其中mx(here :)中的行数3.
  • 的每行Y中填充有一个在k第条目,其中k是一个在矢量的位置x(此处为:k = 2,3,5)
  • 对于x上面的示例,这将导致:

    Y = [0 1 0 0 0;
         0 0 1 0 0; 
         0 0 0 0 1]
    
    Run Code Online (Sandbox Code Playgroud)

    这与单位矩阵相同,其x=0排除了第(n)行.

我目前通过以下代码实现此目的:

x = [0,1,1,0,1]; %example from above
m = sum(x==1);
Y = zeros(m,numel(x));
p = 1;
for n = 1:numel(x)
    if x(n) == 1 
       Y(p,n) = 1;
       p = p+1;
    end  
end
Run Code Online (Sandbox Code Playgroud)

它有效,但我对它不满意,因为它似乎相当低效和不优雅.任何更平滑的实现的想法,可能使用一些矩阵乘法等,是受欢迎的.

Lui*_*ndo 5

以下是一些单行替代方案: