【问题标题】:import data too many text file in MATLAB在 MATLAB 中导入数据过多的文本文件
【发布时间】:2016-12-30 07:03:25
【问题描述】:

我想在 matlab 中导入太多的文本文件。 129013个文件! 我使用了以下代码:

    for i=1:129013
k=importdata('filename.txt')
eval(['A', num2str(i) , ' = ' ,k) ,';']);
end
whos

当然,不接受变量号 129,013。

问题是代码?以及定义了多少变量?

提前谢谢你!

【问题讨论】:

  • 这是一个非常可怕的循环遍历每个文件的过程,为什么不使用 cmd/bash 将所有 txt 文件合并为一个文件,然后再加载该 1 个文件?
  • 对于初学者来说,你只是一遍又一遍地导入同一个文件。你为什么要在这里使用 eval 呢?只需将它放在一个单元格中或附加一个矩阵或任何你的用例......
  • 文件是独立的,不应合并。我曾经定义'eval'的变量。怎么用???
  • @farideh 正如他所建议的,使用元胞数组。另外您使用的是什么版本的 MATLAB?
  • 每个文件的数据数量不同。和数据是字符串。 matlab2012

标签: matlab variables dataset text-files question-answering


【解决方案1】:

首先,如果您真的坚持使用eval(您不应该),您将会遇到问题,因为您试图将k(您的数据)与一个字符串。

['A', num2str(i) , ' = ' ,k) ,';']

您希望连接 字符串 k 以引用您加载的 k

eval(['A', num2str(i), '= k;']);

另外,也许您的真实代码不同,但您似乎在一遍又一遍地加载相同的文件 (filename.txt)。

话虽如此,像这样使用eval 在您的工作区中创建数千个变量是一种非常糟糕的方法,您想要对这些变量执行任何操作都需要更多地使用eval此外,在 R2015b 之前的 MATLAB 版本中,您甚至无法创建尽可能多的变量,因为 MATLAB 仅限于 2^16 变量

最好使用元胞数组来存储数据。

for k = 1:129013
    A{k} = importdata(sprintf('filename%d.txt', k));
end

【讨论】:

  • NOT RUN:: 警告:转义序列“u”无效。有关有效的转义序列,请参见“help sprintf”。使用 importdata 时出错(第 216 行)无法加载文件。使用 TEXTSCAN 或 FREAD 获取更复杂的格式。原因:使用 fread 时出错 无效的文件标识符。使用 fopen 生成有效的文件标识符。
【解决方案2】:

问题解决如下:

for k = 1:129013
fid=sprintf('%d.txt', k);
    A{k} = importdata(['filename',fid]);
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多