3
私は行列A
を持っています。最初の列に繰り返しのあるアイテムIDが含まれ、2番目の列に重みが含まれているとします。ループを使用せずにMATLAB内の2つのベクトルの要素を効率的に比較する方法はありますか?
A= [1 40
3 33
2 12
4 22
2 10
3 6
1 15
6 29
4 10
1 2
5 18
5 11
2 8
6 25
1 14
2 11
4 28
3 38
5 35
3 9];
私は今、各A
のインスタンスとそれに関連する最小重みの違いを見つけたいです。そのためには、最初の列にA
の列1のユニークIDを持ち、列2にA
の関連する最小の重みを含む列2を含む行列B
を作成します。
B=[1 2
2 8
3 6
4 10
5 11
6 25];
そして、IはA
の列3の各エントリとそれに関連する最小の重量の差を保存します。
A= [1 40 38
3 33 27
2 12 4
4 22 12
2 10 2
3 6 0
1 15 13
6 29 4
4 10 0
1 2 0
5 18 7
5 11 0
2 8 0
6 25 0
1 14 12
2 11 3
4 28 18
3 38 32
5 35 24
3 9 3];
これは私がこれを行うために書いたコードです:
for i=1:size(A,1)
A(i,3) = A(i,1) - B(B(:,1)==A(i,2),2);
end
しかし、それはB
をループすることがA
をループするたびに必要として、このコードは実行に時間がかかります。つまり、それはsize(A) x size(B)
の複雑さを持っています。ループを使用せずにこれを行うより良い方法はありますか?それはより速く実行されますか?