[英]Matlab: find a value in a matrix
我有以下矩阵:
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]
这是一个有趣的问题,我有一个非循环的答案,它使用了cumsum
的有趣效果, find
效率很高。
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
我认为这是更有效的方法之一。
======== ========编辑
更好的是,使用逻辑索引:
B = A.*(cumsum(A==23,2)>0);
感谢@obchardon
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.