在MATLAB中转换矩阵

时间:2010-10-24 17:56:30

标签: matlab matrix

假设我有一个向量a = [1 2 4]。我希望它转换为一个看起来像这个b = [1 2 0 4]的向量,即每个数字都放在一个正确的位置,因为3没有包含在向量a中,它被{替换为{向量0中的{1}}。这可以通过以下方式完成:

b

我无法想办法为矩阵做同样的事情。例如,

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];

任何提示?如何才能做到这一点?如何在不使用循环的情况下执行此操作?

2 个答案:

答案 0 :(得分:2)

这是一个矢量化解决方案:

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;

答案 1 :(得分:1)

这有用吗? (编辑:修正了。)

[m,n] = size(c)
d = zeros(m,n)
for i=1:m
    d(i,c(i,c(i,:)>0)) = c(i,c(i,:)>0)
end
相关问题