在Matlab中存储和定位数组的有效方法

时间:2017-03-01 07:04:07

标签: matlab

我有一个表单数组的集合,

a = [1 2 3 5 6 8 9 10]
b = [1 2 3 4 7 14]
c = [1 2 3 4 5 6 7 8 15 19 20]

也就是说,每个都是从1到M的非重复数字的集合(例如,对于该示例,M是20,但实际上可能要大得多)。一般来说,我会有很多这样的数组(很多超过3个,但我不知道前面究竟有多少,可能是5000-10000的数量级)有重复数据(也就是说,数组b可能多次出现) )。

目标:我想将数组存储在某个对象中,称之为X,它跟踪它包含的每个数组的实例数。此外,当面对一个新数组时,我们应该能够搜索X并增加该对象中该数组的计数,或者如果它不在数组中,则将其添加到对象中(计数为1)。 / p>

问题:在Matlab中实现目标的有效方法是什么?

到目前为止我尝试了什么:

我在考虑将数组转换为逻辑数组,例如,

a = [1 1 1 0 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0];

然后可以将上面的内容转换为二进制数a_bin并索引存储该数字的单元格数组X,即X {a_bin}存储a出现的次数。这似乎很难扩展,因为a_bin对于大M来说可能会非常大。

1 个答案:

答案 0 :(得分:1)

使用单元格数组将它们保存在一个位置,如果这个新数组已经在主单元格数组中,则只搜索(=与每个数组进行比较)。无需复杂化。将单元格数组的每个元素标记为已存在于主单元格数组中的位置数组。在新的副本上,更新所有副本。

无论如何,你估计内存使用? 20个元素/数组* 10k数组* 8B /元素= 2MB。这很小。