我正在更新一些继承的遗留代码,并发现了一个有趣的"方法",使我无所适从。
可以使用以下方法对一组数据进行某种程度的模拟:
approximateEntries = 5e6;
maxEntryValue = 5e12;
maxExtraEvents = 10e3;
event1 = randperm( maxEntryValue, approximateEntries + randi( maxExtraEvents ) );
event1 = sort(event1);
event2 = randperm( maxEntryValue, approximateEntries + randi( maxExtraEvents ) );
event2 = sort(event2);
event3 = randperm( maxEntryValue, approximateEntries + randi( maxExtraEvents ) );
event3 = sort(event3);
event4 = randperm( maxEntryValue, approximateEntries + randi( maxExtraEvents ) );
event4 = sort(event4);
data = [[ones(length(event1),1); 2*ones(length(event2),1); 3*ones(length(event3),1); 4*ones(length(event4),1)], ...
[event1'; event2'; event3'; event4']];
data = sortrows(data,2);
clear approximateEntries;
clear maxEntryValue;
clear maxExtraEvents;
也就是说,由于之前的代码编写方式,我可以访问四个数组,每个数组包含约五百万个元素,一个大数组包含四个数组的连接,排序和标记,该数组在另一列中最初是该元素的数组来自。如果我可以避免在解决此问题的方法中使用单个大数组,则可以将其从代码中删除,因为以后不再需要它。
我们正在寻找跨四个"事件"矩阵的值之间接近(在+/- 1000内)匹配的不同特征。这些值可能不一定具有相同的索引,但是每个"事件"矩阵都将按升序排序。我们正在寻找:
每个"事件"矩阵的值对该矩阵唯一的总次数为+/- 1000。
每个"事件"矩阵的值在仅两个矩阵中出现+/- 1000的总次数,而每个可能的矩阵对的总数都不同。
在三个矩阵中,每个"事件"矩阵的值+/- 1000出现的总次数,每个矩阵的三元组的总计数是正确的。
在所有四个矩阵中出现值+/- 1000的总次数
遗留代码尝试以以下令人难以置信的方式执行此操作(我知道它并不完全正确,这就是为什么要对其进行更新)
onlyEvent1 = 0;
onlyEvent2 = 0;
onlyEvent3 = 0;
onlyEvent4 = 0;
onlyEvent1Event2 = 0;