分组相同的矩阵单元阵列
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月
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秒。%哈希