我目前正在从事一个项目,其中我有一个 10 x 2 矩阵: A. 我想使用 MATLAB 查找每行出现的前 3 次。
A = [ 1 2; 1 2; 2 4; 3 2; 3 2; 2 4; 1 2; 1 2; 5 8; 3 2]
作为回报,我想拥有:
[ 1 2 ], 4次。[ 3 2 ], 3次。[ 2 4 ], 2次。
我已经尝试过hist3类似的功能,但无法得到我想要的。
PS 我的原始统计矩阵非常大(大约 565000 x 2 双倍,取决于我分析的图像),我正在寻找它的前 30 个最常见的行。在那种情况下,我几乎不相信任何基于循环的答案会涵盖它。
编辑:我昨天在教授的帮助下找到了答案。
我基本上所做的是设置hist3x 和 y 轴的范围。比方说( -5 : 5 )。
ctrs{1} = -5 : 5;
ctrs{2} = -5 : 5;
hist_A = hist3(A, ctrs);
然后通过使用sort降序格式的函数,我计算了矩阵 A 元素的出现次数和索引。
[hist_A_occurrence, hist_A_index] = sort(hist_A(:),'descend');
最后,选择前 3 个出现次数:
hist_A_index = hist_A_index(1:3);
hist_A_occurrence = hist_A_occurrence(1:3);
性能:
它能够在A563160 x 2 的矩阵上计算前 60 个值,时间为 0.147038 秒,采用 Core i7 第 4 代处理器和 16gb 内存。
该方法非常快,我希望这对其他人有所帮助。
谢谢大家的回答。