例如,我有矩阵:
A = [1 3 5;
2 7 3;
9 3 8];
我想从矩阵3
中移除数字A
,从而获得一个新矩阵:
B = [1 5;
2 7;
9 8];
如果我尝试使用A=A(A~=3)
删除它,它只会给我一个没有数字3
的列向量,但我想要一个具有确切更改大小的矩阵。任何人都知道如何做到这一点?
答案 0 :(得分:2)
通用解决方案:
B = arrayfun(@(r)(A(r,A(r,:)~=3)), 1:size(A,1), 'Uni', false)'
输出一个单元格数组,不假设每行有3
个。{/ p>
为了说明,我将上述行重写为for循环:
for r = 1:size(A,1)
row = A(r,:)
B(r) = row(row~=3)
end
如果您的所有行包含相同数量的3,请参阅Santhan's answer
或者根据你评论中的新要求:
A(A==3) = NaN;
或者如果你想消除多于一个数字
A(ismember(A, [2,3])) = NaN
答案 1 :(得分:2)
一个备用,假设每行包含相同数量的3's
A = [1 3 5; 2 7 3; 9 3 8];
B = A.'; %//'
out = reshape(B(B~=3),[],size(A,1)).'
<强>结果:强>
A =
1 3 5
2 7 3
9 3 8
out =
1 5
2 7
9 8
注意:如果每行中3的数量不相等,请参阅other answer
中@Dan的通用解决方案或者使用mat2cell
&amp; cellfun
<强>代码:强>
%// creating cells where each cell contain one row
AC = mat2cell(A,ones(1,size(A,1)),size(A,2));
%// returning only the elements not equal to 3 in each row
out = cellfun(@(x) x(x~=3),AC,'uni',0)
<强>结果:强>
A =
1 3 5 3
2 7 3 1
9 3 8 5
out =
[1x2 double]
[1x3 double]
[1x3 double]