引用和分配 matlab 数据集的子集似乎效率极低,并且可能像 rows^2 一样缩放
例子:
alldata 是一个混合数据的大型数据集——比如 150,000 行乘 25 列(整数、布尔值和字符串)。
数据集的格式为:
'format', '%s%u%u%u%u%u%s%s%s%s%s%s%s%u%u%u%u%s%u%s%s%u%s%s%s%s%u%s%u%s%s%s%u%s'
然后我将 2 类型整数 cols 转换为布尔类型
以下子集分配:
somedata = alldata(1:m,:)
对于 m = 10,000 需要 >7 秒,对于较大的 m 值需要花费大量时间。绘制时间与 m 显示了 am^2 类型的关系,这很奇怪,因为复制 alldata 几乎是瞬时的,就像使用 sortrows 和 find 之类的函数一样。事实上,读取原始 .csv 数据文件比上面对大 m 值的赋值要快。
使用分析器,似乎有一个函数 subref 包含一条非常慢的线,用于检查字符串比较以确定数据集中的唯一值。这与数据集类型的存储方式(即参考表)有关吗?数据集包含大量唯一字符串值。
他们有在matlab中提取数据集子集的任何解决方案吗?例如预分配(如何?),或复制数据集并删除行而不是分配提取/子集。
我正在使用具有 1.5Gb 内存的双核机器,但任务管理器报告使用的内存少于 1Gb。