業特定の行の削除(ある行まで)
Show older comments
約100000×3の以下の添付写真のような行列があります。
1列目、2列目はある画像のX,Y座標を記録しており、どちらも0と記録されている箇所もあります。
3列目は1か0が並んでおります。
やりたいこととしては、
①1行目から順番に1,2列目の数値を見ていき初めて0ではない数値(写真では(x,y)=(278,564))が出てくる行までを削除
この時、1,2列目の数値で0出ない行が出て以降の行で、0を含む行は削除しないようにしたいです
②残った行列から、3列目が0の行のみを削除
上記二つを順番に行うことを目標にしております。
matlab初心者でして、idxやfor+breakなどでも試しましたが思ったようにいかず…どのようにしたらできるのか教えていただけますでしょうか?
説明の至らない箇所がございましたらご質問ください。
よろしくお願いいたします。

Answers (1)
まずはデータを作ります
clc,clear;
A = zeros(50,3);
n = 20;
A(1:n+10,3) = 1;
A(n+1:end,1:2) = randi([1,30],[50-n, 2]);
A(end-5:end-2,1:2) = 0;
A(n+15:end,3) = 1
条件式より最初に0じゃない場所を見つけます
idx = A(:,1:2) ~= 0;
num = find(idx);
n1 = num(1)
最初から0じゃない場合も考慮して、if分を設けてます
if n1 ~= 1
A(1:n1-1,:) = []
end
3列目で0がある部分を消します
idx2 = A(:,3) == 0;
A(idx2,:) = []
最後の7行分を見てみましょう
disp(A(end-6:end,:))
0があっても消えていないことが確認できました
1 Comment
y Ishiwata
on 30 Mar 2022
Categories
Find more on cell 配列 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!