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

配列の要素削除に関して以下のプログラムからあるエラーが出てきており困っています。
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

2 个投票

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 个)

类别

帮助中心File Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!