MATLAB中矩阵的转换
假设我有一个向量MATLAB中矩阵的转换,matlab,matrix,Matlab,Matrix,假设我有一个向量a=[1 2 4]。我想把它转换成一个向量,看起来像这样,也就是说,每个数字都被放在一个正确的位置,因为3不包括在向量a中,它在向量b中被0替换。这可以通过以下方式完成: a = [1 2 4] b = zeros(1, size(a, 2)); b(1, a) = a; 我想不出一个方法来对矩阵做同样的事情。比如说, c = [1 4 2 0; 3 1 0 0; 4 0 0 0; 1 3 4 0]; 我需要转换成一个矩阵,如下所示: d = [1 2 0 4; 1 0 3
a=[1 2 4]
。我想把它转换成一个向量,看起来像这样,也就是说,每个数字都被放在一个正确的位置,因为3
不包括在向量a
中,它在向量b
中被0
替换。这可以通过以下方式完成:
a = [1 2 4]
b = zeros(1, size(a, 2));
b(1, a) = a;
我想不出一个方法来对矩阵做同样的事情。比如说,
c = [1 4 2 0; 3 1 0 0; 4 0 0 0; 1 3 4 0];
我需要转换成一个矩阵,如下所示:
d = [1 2 0 4; 1 0 3 0; 0 0 0 4; 1 0 3 4];
有什么建议吗?如何做到这一点?如果不使用循环,如何执行此操作?此操作有效吗?(已编辑:修复错误。)
这是一个矢量化的解决方案:
a = [1 4 2 0; 3 1 0 0; 4 0 0 0; 1 3 4 0];
b = zeros(size(a,1),max(a(:)));
[rowIdx,~] = find(a);
vals = a(a>0);
b( sub2ind(size(b),rowIdx,vals) ) = vals;
b=0(1,大小(a,2))是如何产生的;a(1,b)=b;实现你要求的改变?对不起,我错了。上面已更正。有没有不使用循环的方法?我使用的是非常大的数据集,循环往往非常慢……我认为这是可能的,但在这种情况下,您对每一行都执行相同的操作,因此在每一行上进行循环是非常困难的。即使对于大型矩阵,我也不认为循环会使过程变得异常缓慢。
a = [1 4 2 0; 3 1 0 0; 4 0 0 0; 1 3 4 0];
b = zeros(size(a,1),max(a(:)));
[rowIdx,~] = find(a);
vals = a(a>0);
b( sub2ind(size(b),rowIdx,vals) ) = vals;