私は1200000行と18列の行列を持っています。交通データであり、各行は一意であり、第1列は「車両ID」であり、第2列は「フレームID」であり、第16列は「フロント車両ID」である。私は、MATLABが同じフレームIDのデータ全体からフロント車両の行ベクトルを見つけ、それをPVと呼ばれる別の行列に配置します。また、前方に車がない場合は、ゼロベクトルを配置します。行列全体を「H1」といいます。私は以下のコードを使用し、作業にはパーセンテージを使用しました。ただし、実行時間が遅すぎるため、16GBのメモリで14時間以上かかります。他の10のデータがあるので、それは私にとっては長すぎます。それをより速くより良くするために私を助けてください。このMATLABコードをループ内で高速化する方法はありますか?
ありがとうございます。
for i=1:1200000
i*100/m % Shows what percent of the work done
g = H1(H1(:,1)==H1(i,16),:);
g = g(g(:,2)==H1(i,2),:);
if isempty(g)==1
PV(i,:) = zero(1,:);
else
PV(i,[1:17])=g(1,[1:17]);
end
end
EDIT:データは10000ページで本のようです。各ページはフレームID(ページ番号はフレームID)であり、車内に多数の車両があり、固有の車両IDを持ちます。だから、どのページにも上から撮ったイメージがあり、このイメージの中にはたくさんの車があります。 0.1秒の時間間隔で画像を貼り合わせると、車両の走行フィルムが得られます。このデータには、MATLABの "plot"コマンドを使用して各フレームを描画できる車両のx座標とy座標が含まれます。このデータには、各行の16桁目のIDを持つ先行車両(自車両前方の車両)も含まれる。すべての車両の情報がデータに含まれていることに注意してください。自車の前方に車両が存在しない場合、第16列の数字は0である。したがって、どの列にも1台の車両の情報しか表示されません。データは、フレームIDに関してソートされる。
ここでは、先行車両の行を行列全体から抽出し、PVの行列に配置する必要があります。問題は、パーセンテージが約5%になるとゆっくりと変化することです。ここで、データのサンプルである:
[629 2033...581]
最初の列は、第二は、フレームID及び16は、このフレームIDに先行車のIDであり、車両のIDです。ここでは、車番号581が2033のフレームIDの車番号629の前にあります。今度は、フレーム2033で車両ID 581のデータを抽出し、PV行列に配置する必要があります。
その他のサンプル:最初は車両ID、2番目はフレームID、3番目の番号は先行車両IDです。
[629 2033 688 1113433338200 28.703 462.09 6042802.932 2133529.776 56.3 7.9 3 12.8 5.09 3 581 640 95.39]
[577 2033 465 1113433338200 79.392 618.232 6042833.946 2133691.06 17.3 8.4 2 30.19 -0.37 7 0 3362 0]
[580 2033 621 1113433338200 53.4 542.455 6042817.601 2133612.708 18.3 7.5 2 20.49 -0.09 5 572 3361 80.9]
[581 2033 565 1113433338200 27.252 557.481 6042789.779 2133624.359 16.8 7.4 2 21.25 4.19 3 573 629 62.54]
ご説明いただきありがとうございます。
私たちは、まずフレームごとにコードを適用する1つのセル配列に、各フレームのIDを抽出する必要があります:私は答えを見つけた他人の助けを借りて
長さ(ユニーク(H1(:1)))は何を返しますか? – grantnz
実際のデータを添付できますか?それは人々が答えを公式化するのを助けるかもしれない。 – m7913d
_frame ID_でデータをソートすることによって、同じ_frame ID_を持つ行を1回だけ抽出すると便利です。 – m7913d