分组相同的矩阵单元阵列

1视图(30天)
考虑两个细胞数组(大小6 x1),其中每个条目包含一个矩阵,如。
= {(1 2;3 4][2 2 3;2 2 3][1 2;[1 2 3 4);3 4][2 3 2;3 4 5][2 2 3;2 2 3]}';
b = {(5 6;7 8][2 2 3;2 2 3][9 9;9 9][5 6;7 8][2 3 2;3 4 5][2 2 3;2 2 3]}';
我想找一个数组,它分配一组的每个六项,即
组= (1 2 3 1 4 2);
一群被定义为相同的A{},{我}条目(或到公差)。我想出了下面的蛮力的代码
n =长度(一个);
组= 0 (n, 1);
counter = 0;
i = 1: n
如果组(我)~ = 0
继续;
结束
counter = counter + 1;
组(i) =计数器;
j = i + 1: n
如果组(j) ~ = 0
继续;
结束
如果isequal ({}, {j}) & & isequal (b {}, {j})
组(j) =计数器;
结束
结束
结束
因为for循环效率很低。有更聪明的方式找到这些团体吗?谢谢:)
1评论
Stephen23
Stephen23 2021年5月31日
“这是相当低效因为for循环”
我怀疑循环本身消耗太多的时间。你运行分析器吗?

登录置评。

接受的答案

1月
1月 2021年5月31日
编辑:1月 2021年5月31日
从一个简化版本的代码:
n =元素个数(一个);
组= 0 (n, 1);
counter = 0;
i = 1: n
如果组(i) = = 0
counter = counter + 1;
组(i) =计数器;
j = i + 1: n
如果组(j) = = 0 & & isequal({我},{j}) & & isequal (b {}, {j})
组(j) =计数器;
结束
结束
结束
结束
现在我们假设细胞数组a和b是巨大的,例如1 e6元素。然后比较1 e6和1 e6-1元素花大量的时间。它创建一个哈希:可能会比较便宜
散列=细胞(1,n);
k = 1: n
哈希{k} = GetMD5 (b {{k}, {k}},“数组”,“bass64”);
结束
[~,~,组织]=独特(散列,“稳定”);
% 1 e6元素每单元、R2018b Win10:
%运行时间是21.341034秒。%原
%运行时间是21.286879秒。%清洗
%运行时间是6.252804秒。%哈希
1评论
卡斯滕保罗
卡斯滕保罗 2021年5月31日
很好,完美的工作,速度更快。我的细胞阵列的确是相当巨大的,1 e4和1之间e6元素。谢谢:)

登录置评。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的