【问题标题】:Faster Matlab Table Creation更快的 Matlab 表创建
【发布时间】:2015-05-13 20:49:24
【问题描述】:

我注意到在 Matlab 中创建相当大的表(>10,000 行)可能会很慢,因为构造函数 checkDuplicateNames 调用了一个函数。但是,我通常确信我传递给表的名称已经是唯一的。

下面很好地说明了这个问题。生成 10,000 个随机值需要不到一毫秒的时间,但生成带有字符串行名的随机值表需要 1.4 秒,而通过检查重复的行名则需要 1.4 秒:

profile on; 
a = rand(10000,1);
strind = cellstr(num2str((1:10000)'));
b = table(a, 'RowNames', strind); 
profile viewer

那我很好奇,有没有另一种方法可以在 Matlab 中创建表格而不调用 checkDuplicateNames 函数?

【问题讨论】:

  • 既然table.m函数是可编辑的,为什么不复制它的内容并通过删除慢行创建一个tablewithoutchecks.m文件呢?
  • 一点点挖掘表明你可以通过改变setRowNames 的调用方式来做到这一点。有一个allowDups 参数,当设置为1 时,会绕过占用大量时间的检查。遗憾的是,在您调用 table 函数时,我找不到如何设置 allowDups = 1,因此您可能仍需要创建一些重复的函数才能使其正常工作。
  • @Wouter:因为我必须复制的不仅仅是 table.m(实际上是基本 Matlab 安装中 @table 的整个文件夹),我怀疑这种方法会给我末尾有一个 table 对象,而不是一个不适用于为表编写的函数的新类型。
  • @Luis:我需要一种将多个系列的值与标签相关联的方法,这就是表格对我的作用。如果我在几个月前就知道这一点,我也许可以解决这个问题,但现在我有一个完整的项目,只是在各处传递表格,我正试图逐步改进。
  • @DavidKelley 你不能用你自己的一个不执行任何操作的版本来隐藏checkDuplicateNames 函数吗?

标签: matlab matlab-table


【解决方案1】:

根据 MathWorks 员工的this reply,如果不更改核心 Matlab 文件,您将无法做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2013-01-02
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多