|
|
1
6
你可以试试什么
测试:
输出:
使用单元格
|
|
|
2
10
增加一个数组通常是一件不好的事情,至少如果你要做很多次。我们可以使用一些技巧。(我已经试过了所有的方法,如果你愿意的话,我会自动为你写一些工具。) 问题是与数组增长相关的时间是一个O(n^2)操作。它还会使您的内存碎片化,如果以后需要创建一个大型数组,则会给您留下潜在的问题。 一种方法是将数组预分配到某个固定的大小,然后在数组大小超出时附加大量的零块。现在使用矩阵索引将新值插入现有数组。其思想是,每当需要重新分配数组时,将其大小增加一倍。这只会导致一些重新分配,但最终可能会附加许多不需要填充的零。最后,转储无关和未使用的数组元素。 第二个技巧是使用一个单元数组。每当您想要附加一个新的元素或其块时,您只需附加一个带有这些元素的新单元。最后,你要做一个cell2mat操作。单元技巧的一个问题是它仍然是一个O(n^2)操作,因为单元数组本身本质上是一个指针数组,并且在附加新元素时必须重新分配指针列表。 有一个组合技巧,你可以做我喜欢的,但它需要一个工具来实现操作。我们的想法是创建包含10000个元素的单元。用零填充第一个块。然后使用矩阵索引在生成新元素时插入新元素。当然,矩阵索引很快。当该单元格空间不足时,将追加一个新的大单元格。然后在最后,将所有单元格关联在一起,小心地删除未使用的元素。 最后一个方案涉及到要附加的新单元元素相对较少,因此如果可能有数百万个附加步骤,那么总体来说效率最高。 您可以在我多年来发布的几个文件交换提交中找到这些方法中的每一种。第一个可以被发现为 grow_array 它在内部管理附加步骤,为您担心矩阵索引。 稍后,我使用函数句柄或持久变量构建了最后一个方案来维护存储的信息。包含这些实现的工具被发现为 growdata and growdata2 . |
|
|
3
2
在之前的一个问题中,我发布了 a similar solution 根据提议 @Jacob . 我后来比较了大多数可用选项的性能(总结如下 @woodchips 以上)。以下是我在机器上得到的结果:
|
|
|
4
0
您可以增加一个比阵列便宜得多的单元阵列,然后使用
如果知道可以预先分配正确大小的单元格数组的像素数,请使用实际值数组(最多640个,但通常为2-5个)填充每个单元格,然后使用
如果你担心碎片,你可以
|
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
|
Daniel Lobo · 使用约束进行优化 1 年前 |
|
Sergio · python中大量数字的乘法 2 年前 |
|
|
Sergey Dev · 临时表与表变量 2 年前 |
|
|
John · 减少C中的内存消耗++ 2 年前 |