我使用的是 Matlab 符号。我有一个大小为 (Nx3) 的矩阵 A,其中 A 的每个条目都是正整数。我想创建一个维度为 (max(max(A))x2) 的矩阵 Q。Q 的第 i 行对应于 A 的列索引,因此 A(k,r) = i。因此,如果 A(k_1,r_1) = i 且 A(k_2,r_2) = i,我们可以设置 Q(i,:)=[k_1,k_2]。对于 A 的唯一条目,Q 的相关行的每一列都相等。
有没有办法将任务矢量化?我可以使用循环执行任务,但在 MATLAB 中效率很低(当矩阵 A 有很大的行并且 max(max(A)) 也很大时)。这是一个例子。
A=[ 1 10 9
1 2 4
3 2 11
3 12 5
6 13 4
6 7 15
8 7 5
8 14 16]
在上面的例子中,预期结果是
Q =
1 1
2 2
1 1
3 3
3 3
1 1
2 2
1 1
3 3
2 2
3 3
2 2
2 2
2 2
3 3
3 3
这就是我的慢速代码所做的
max_Q = max(max(A));
Q = zeros(max_Q,2);
for i = 1 : max_Q
[~,cols] = find(i == A);
Q(i,:) = cols;
end