業特定の行の削除(ある行まで)

19 visualizaciones (últimos 30 días)
y Ishiwata
y Ishiwata el 25 de Mzo. de 2022
Comentada: y Ishiwata el 30 de Mzo. de 2022
約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などでも試しましたが思ったようにいかず…どのようにしたらできるのか教えていただけますでしょうか?
説明の至らない箇所がございましたらご質問ください。
よろしくお願いいたします。

Respuestas (1)

Hernia Baby
Hernia Baby el 25 de Mzo. de 2022
まずはデータを作ります
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
A = 50×3
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1
条件式より最初に0じゃない場所を見つけます
idx = A(:,1:2) ~= 0;
num = find(idx);
n1 = num(1)
n1 = 21
最初から0じゃない場合も考慮して、if分を設けてます
if n1 ~= 1
A(1:n1-1,:) = []
end
A = 30×3
27 9 1 19 9 1 21 4 1 9 16 1 17 24 1 3 6 1 17 17 1 9 13 1 7 7 1 8 25 1
3列目で0がある部分を消します
idx2 = A(:,3) == 0;
A(idx2,:) = []
A = 26×3
27 9 1 19 9 1 21 4 1 9 16 1 17 24 1 3 6 1 17 17 1 9 13 1 7 7 1 8 25 1
最後の7行分を見てみましょう
disp(A(end-6:end,:))
22 16 1 0 0 1 0 0 1 0 0 1 0 0 1 10 12 1 23 25 1
0があっても消えていないことが確認できました
  1 comentario
y Ishiwata
y Ishiwata el 30 de Mzo. de 2022
お返事が遅くなってしまい申し訳ございません。
教えていただいたものでやりたいことができました。ありがとうございました。

Iniciar sesión para comentar.

Categorías

Más información sobre table en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!