配列の要素操作に関するエラー

1 回表示 (過去 30 日間)
- Tei
- Tei 2017 年 12 月 1 日
編集済み: michio 2017 年 12 月 1 日
配列の要素削除に関して以下のプログラムからあるエラーが出てきており困っています。
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 です。
この時、 「添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。」
というエラーで出てきてしまい、プログラムが実行されません。
どの様に変更すればよいのでしょうか。
どうかよろしくお願いします。

採用された回答

michio
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 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!