【发布时间】:2016-09-19 15:41:07
【问题描述】:
假设我有一个矩阵 A,其第一列包含重复的项目 ID,第二列包含它们的权重。
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 的每个实例的差异及其相关的最小权重。为此,我创建了一个矩阵B,其第一列包含来自A 的第1 列的唯一ID,其第2 列包含从A 的第2 列找到的相关最小权重。
B=[1 2
2 8
3 6
4 10
5 11
6 25];
然后,我想在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
但是这段代码需要很长时间才能执行,因为它每次循环通过A 时都需要循环通过B。也就是说,它的复杂度为size(A) x size(B)。有没有更好的方法可以在不使用循环的情况下执行此操作,从而执行得更快?
【问题讨论】:
标签: matlab vectorization