配列の要素操作に関するエラー
1 回表示 (過去 30 日間)
古いコメントを表示
配列の要素削除に関して以下のプログラムからあるエラーが出てきており困っています。
a=bboxes
b=score
c=label
d=(find(score<0.9))
d=round(d)
e=numel(d)
for f=0:e
score(d(end-f))=[]
label(d(end-f))=[]
bboxes(d(end-f),:)=[]
end
となっており、bboxes,score,labelはそれぞれ他の関数から出力され、 それぞれのデータの型は
bboxesはM-by-4 matrix
scoreはM-by-1 vector
labelはM-by-1 array です。
この時、 「添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。」
というエラーで出てきてしまい、プログラムが実行されません。
どの様に変更すればよいのでしょうか。
どうかよろしくお願いします。
0 件のコメント
採用された回答
michio
2017 年 12 月 1 日
編集済み: michio
2017 年 12 月 1 日
a=bboxes
b=score
c=label
d=score<0.9;
score(d)=[]
label(d)=[]
bboxes(d,:)=[]
で行けるのではと。ここで d は論理配列でいろんな使い方ができます。
たとえば
x = rand(10,1);
idx = x < 0.5;
x(idx) = 0;
などと 0.5 未満の値を0に変えるなどループを使わずに実施できます。
x = rand(10,1);
idx = x < 0.5;
sum(idx)
とすると 0.5 未満の要素数も計算できます。実行速度も段違いに早くなりますので、オススメです。
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!