Matlab:在矩阵中找到一个值

时间:2016-09-09 13:13:03

标签: matlab matrix find

我有以下矩阵:

A= [23 34 45 0 0 0; 21 34 0 0 23 11; 34 23 0 0 0 22]

我想找出一个值是否存在以及它是否存在,我想找到以下值。

例如,我想在A中找到值23,如果它存在,我想要输出一个只有23的矩阵及其后续值

B= [23 34 45 0 0 0; 0 0 0 0 23 11; 0 23 0 0 0 22]

2 个答案:

答案 0 :(得分:3)

这是一个有趣的问题,我有一个非循环的答案,它使用cumsumfind的有趣效果来提高效率。

G = zeros(size(A));
T = find(A==23);
G(T) = 1;
mask = cumsum(G,2)>0;

result = mask .* A;

>> result =

23    34    45     0     0     0
 0     0     0     0    23    11
 0    23     0     0     0    22

我认为这是一种更有效的方法。

====== EDIT ======

更好,使用逻辑索引:

B = A.*(cumsum(A==23,2)>0);

感谢@obchardon

答案 1 :(得分:1)

find()在矩阵A中返回所需值的行和列,在您的情况“23”中。 使用for循环,您可以复制值及其后续值:

A = [23 34 45 0 0 0; ...
    21 34 0 0 23 11; ...
    34 23 0 0 0 22];
[r, c] = find(A==23);

B = zeros(3,6);

for i=1:length(r)
    columns = c(i):length(B);
    B(i,columns) = A(r(i),columns);
end;