簡體   English   中英

Matlab:在矩陣中找到一個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM