Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中矩阵的转换_Matlab_Matrix - Fatal编程技术网

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;