MATLAB中的可扩展数据结构

MATLAB中的可扩展数据结构,matlab,linked-list,Matlab,Linked List,我需要在matlab中创建一个队列来保存非常大的结构。我不知道这个队伍会有多大。Matlab没有链表,我担心重复分配和复制会降低代码的运行速度,而这些代码必须运行数千次。我需要某种方法来使用可增长的数据结构。我在matlab帮助中找到了两个链表条目,但我不明白发生了什么。有人能帮我解决这个问题吗?如果您担心重复分配和复制会降低代码速度,请尝试。事实上,它可能非常缓慢,但你可能会感到惊喜 只需创建一个结构数组,当数组达到极限时将其大小增加一倍。这可以很好地扩展。我不久前发布了一个类似的问题。我尝试

我需要在matlab中创建一个队列来保存非常大的结构。我不知道这个队伍会有多大。Matlab没有链表,我担心重复分配和复制会降低代码的运行速度,而这些代码必须运行数千次。我需要某种方法来使用可增长的数据结构。我在matlab帮助中找到了两个链表条目,但我不明白发生了什么。有人能帮我解决这个问题吗?

如果您担心重复分配和复制会降低代码速度,请尝试。事实上,它可能非常缓慢,但你可能会感到惊喜


只需创建一个结构数组,当数组达到极限时将其大小增加一倍。这可以很好地扩展。

我不久前发布了一个类似的问题。我尝试的方法是,为数组分配一个初始大小
BLOCK\u size
,然后根据需要不断增加
BLOCK\u size
(只要空闲插槽少于
10%*BLOCK\u size
时)


请注意,如果有足够的块大小,性能与从一开始就预分配整个阵列相当。请参阅另一篇文章,了解我所做的简单基准测试。

好吧,我找到了简单的答案:

L = java.util.LinkedList;

我认为内置的
单元
结构适合存储可生长的结构。 我比较了:

  • 动态大小单元格,每个循环单元格的大小都会发生变化
  • 预分配单元
  • Java链接列表
代码:

结果:

Elapsed time is 0.102684 seconds. % dynamic
Elapsed time is 0.091507 seconds. % pre-allocated
Elapsed time is 0.189757 seconds. % Java LinkedList
我改变了
scale
magic(20)
,发现动态版本和预先分配的版本在速度上非常接近。也许单元格只存储指针式结构,并且可以有效地调整大小。
Java方式比较慢。我发现它有时不稳定(当规模非常大时,它会使我的MATLAB崩溃)。

结构是如何实现的?移动数组是否意味着复制指针?据我所知,Matlab中的所有内容都是数据。所以结构就是数据。你不需要“移动阵列”。只需将现有阵列的大小增加一倍
x(2*length(x))=…您的“空”结构体
@rlbond:是的,MATLAB结构体和单元格本身不包含数据,而是指向数据的指针,因此所有操作都很便宜。@rlbond:这真是悲哀。如果您想了解它,请转到Matlab的“桌面”菜单,并打开探查器。
Elapsed time is 0.102684 seconds. % dynamic
Elapsed time is 0.091507 seconds. % pre-allocated
Elapsed time is 0.189757 seconds. % Java LinkedList