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,描述如下:
Y有m行,其中m是x(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)
它有效,但我对它不满意,因为它似乎相当低效和不优雅.任何更平滑的实现的想法,可能使用一些矩阵乘法等,是受欢迎的.
以下是一些单行替代方案:
使用sparse:
Y = full(sparse(1:nnz(x), find(x), 1));
Run Code Online (Sandbox Code Playgroud)类似但有accumarray:
Y = accumarray([(1:nnz(x)).' find(x(:))], 1);
Run Code Online (Sandbox Code Playgroud)使用eye和索引.这假设Y先前未定义:
Y(:,logical(x)) = eye(nnz(x));
Run Code Online (Sandbox Code Playgroud)