假设我有一个向量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];
任何提示?如何才能做到这一点?如何在不使用循环的情况下执行此操作?
答案 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