MATLAB有一个不连续的列表吗?

时间:2016-03-18 03:12:01

标签: matlab

MATLAB的列表/数组具有连续的内存。所以我认为追加/连接必须要求重新分配和数据复制,虽然我不确定它是否在内部保留空间。

MATLAB是否有一个包含不连续内存的列表,因此我们可以追加持续开销的元素?它有一个containers.Map。是否有持续的访问时间?如果是这样,我可以用它来模拟一个列表。

2 个答案:

答案 0 :(得分:2)

根据澄清,我会选择containers.MapCell Array,如果可以编写自己的例程,不经常增长,更大的步骤(每次加倍,说)。我选择哪一个取决于正在做什么,因为与他们合作是相当不同的。

有两种数据结构接近,另一种解决方案。

  • containers.Map。我不确定确切的复杂性,我从未找到关于它的确切陈述。它应该是一个哈希表,所以原则上你应该有O(1)。但是,我不知道你在所有条件下都会保持不变。如果您不能提前分配,或者根据需要不可能加倍(或如此)大小,这可能是您想要使用的。

  • 单元格数组。根据我的经验,它几乎等同于带指针的数组,无论内部是什么,访问时间都是人们期望的。我不知道要求的复杂程度。单元阵列有各种类型,性能取决于,例如,请参阅this page on Matlab有关单元阵列类型之间的差异。它通知我们生成的代码将是C数组或C结构。我认为可以安全地从中推断出表现。

  • 是的,如果您愿意,可以在MEX中实施任何一项。

您可以要求预先记录内存:设置所需大小的结构。如果没有对初始化有意义的值,请使用相应的赋值将其清空(例如,对于数组等= [])。这就是我的工作。您可以根据需要定期执行此操作(例如循环)。应该没有数据副本或新的内存分配。

答案 1 :(得分:0)

我用mex实现了一个std :: vector-like单元格。因此它具有预先分配的内存,并在内存达到最大大小时重新分配。