矩阵的映射值?
Mapping values of a matrix?
所以我有一个大矩阵 (4091252x2),看起来像这样:
439105 1053224
439105 1696241
439105 580064
439105 1464748
1836139 1593258
1464748 439105
1464748 1053224
1464748 1696241
1464748 580064
580064 439105
基本上,矩阵表示一个人对另一个人的呼叫,由 personID 表示(439105 呼叫 1053224)。我想要做的是缩小这个矩阵,使最小的 personID = 1,下一个最低的 personID 为 2,之后的下一个最低的 personID 为 3,等等。例如,如果矩阵看起来像这样:
110 503
402 110
300 900
300 402
402 110
我希望它映射到:
1 4
3 1
2 5
2 3
3 1
问题是我是 Matlab 的初学者,我不知道该怎么做。我调查了 reshape and sub2ind,但我真的不认为这就是我要找的东西。我如何在 Matlab 中完成这个?
任何帮助将不胜感激,谢谢!
对于这样的问题,函数 unique
是你的朋友。输入 help unique
获取更多信息。
对于这道题,如果你有输入:
input = [[110 503];
[402 110];
[300 900];
[300 402];
[402 110]];
您可以通过如下方式得到想要的映射:
output = input;
[C,IA,IC] = unique(input(:));
output(:) = IC;
这将产生所需的输出:
output =
1 4
3 1
2 5
2 3
3 1
IC 包含索引(即 "IC" 中的 "I"),因此它们的值将从 1 到输入数组中唯一值的数量。如果您想使用其他一些标记,可以使用 IC 索引到另一个唯一标识符数组。
仅供参考,在我的 Macbook Pro 上,对 4091252x2 阵列执行此操作大约需要 1.2 秒。
你可以使用unique
的第三个输出来达到这个目的,它只需要整形。
A=[110 503
402 110
300 900
300 402]
[~,~,D]=unique(A);
reshape(D,size(A))
所以我有一个大矩阵 (4091252x2),看起来像这样:
439105 1053224
439105 1696241
439105 580064
439105 1464748
1836139 1593258
1464748 439105
1464748 1053224
1464748 1696241
1464748 580064
580064 439105
基本上,矩阵表示一个人对另一个人的呼叫,由 personID 表示(439105 呼叫 1053224)。我想要做的是缩小这个矩阵,使最小的 personID = 1,下一个最低的 personID 为 2,之后的下一个最低的 personID 为 3,等等。例如,如果矩阵看起来像这样:
110 503
402 110
300 900
300 402
402 110
我希望它映射到:
1 4
3 1
2 5
2 3
3 1
问题是我是 Matlab 的初学者,我不知道该怎么做。我调查了 reshape and sub2ind,但我真的不认为这就是我要找的东西。我如何在 Matlab 中完成这个?
任何帮助将不胜感激,谢谢!
对于这样的问题,函数 unique
是你的朋友。输入 help unique
获取更多信息。
对于这道题,如果你有输入:
input = [[110 503];
[402 110];
[300 900];
[300 402];
[402 110]];
您可以通过如下方式得到想要的映射:
output = input;
[C,IA,IC] = unique(input(:));
output(:) = IC;
这将产生所需的输出:
output =
1 4
3 1
2 5
2 3
3 1
IC 包含索引(即 "IC" 中的 "I"),因此它们的值将从 1 到输入数组中唯一值的数量。如果您想使用其他一些标记,可以使用 IC 索引到另一个唯一标识符数组。
仅供参考,在我的 Macbook Pro 上,对 4091252x2 阵列执行此操作大约需要 1.2 秒。
你可以使用unique
的第三个输出来达到这个目的,它只需要整形。
A=[110 503
402 110
300 900
300 402]
[~,~,D]=unique(A);
reshape(D,size(A))