【问题标题】:What is the best way to preallocate a table in Matlab?在 Matlab 中预分配表的最佳方法是什么?
【发布时间】:2014-05-20 22:48:09
【问题描述】:

通常我根据数据类型使用cell()zeros()ones() 进行预分配,但是预分配表的最佳方法是什么,因为它可以容纳各种数据结构?

我说的是 Matlab 2013b 中添加的 table() 功能。

显然我可以使用这样的代码来保留内存:

T = table(cell(x,y))

但是当我的表应该包含各种数据类型时,我遇到了问题。想象一下,我现在想填写一列整数,或者像我的情况一样,用包含字符串、整数和浮点数的观察值填充每一行。 T

【问题讨论】:

    标签: matlab memory matlab-table


    【解决方案1】:

    当您不想告诉它表中存储了哪些数据时,Matlab 应该如何知道要分配多少内存?除了“不要这样做”之外,我认为您的问题没有很好的答案。如果您知道每列中存储的内容,请create the variables 并随时添加行。

    或者在预先分配的矩阵/单元格中创建数据,并在最后从它们创建表格。

    【讨论】:

    • 嗯,好点。在我的情况下,我知道每列将是什么类型的数据,例如列“名称”将始终包含字符串。然后,我在循环的每次迭代中向表中添加各种行(数量取决于数据)。因此,如果我理解正确,我应该使用预先分配的数据创建变量。例如名称的长 cell() 列并将其包含在表中。但是我不知道最后会有多少行。高估然后删除最后的空行是一个好主意吗?
    • 我不能给你一个好的建议。这取决于你高估了多少。我的意思是,如果您预先分配单元格,它们不会为您的字符串分配空间,因为 Matlab 应该如何知道它们有多长?我想与分配字符串相比,重塑单元格不会花费太多时间。除非您可能有 100k 条目。尽管如此,如果性能是一个问题,最好一次重新分配 10k 单元,然后分配 300k 并且只使用 100k。
    • 刚刚在这里测试过:`a= cell(10000000,1)';可能足够快,也不会占用太多内存。所以高估可能不会成为问题,除非你超出这个范围
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多