【问题标题】:Matlab importdata text fileMatlab导入数据文本文件
【发布时间】:2016-09-21 04:44:51
【问题描述】:

我尝试从文本文件中导入数据。数据文件格式应该是第一行是char,其他是数字,就像xls文件一样。但是该文件是由其他软件作为文本文件生成的,其中所有数据都在一行中,用一个空格键分隔,“制表符”作为新的数据行。

我要导入matlab的数据格式应该是这样的:

A B C D
1 2 3 4
5 6 8 8
8 0 9 5

但是现在文本文件中的数据是

A B C D   1 2 3 4   5 6 8 8   8 0 9 5

我应该如何将文本文件以矩阵形式导入 matlab?我试过importdata,但答案是 4x1 单元格。我的 Matlab 版本是 2008。

对不起,我对 matlab 很陌生。谢谢。

编辑: 我意识到数据是

A B C D  1 2 3 4  5 6 8 8 8  8 0 9 5  7 0 8 8 8  5 0 9 9 

您能教我如何将这些东西放入单元格中,请使用一个字符/第一个单元格吗?

   A B C D
   1 2 3 4
5  6 8 8 8
   8 0 9 5
7  0 8 8 8
   5 0 9 9 

因为当我按照建议使用 cell2mat 时,错误消息是 CAT arguments dimensions are not consistent.

非常感谢!

【问题讨论】:

  • 因为您有两种不同的类型(double 和 char),所以不可能将所有内容放在一个矩阵中。这就是ìmportdata 生成元胞数组的原因。
  • 为什么还在用2008版的Matlab?
  • 我们不支付许可证费用吗? =P

标签: matlab text import


【解决方案1】:

让我们从您从文本文件生成的元胞数组开始。我称之为A。这是一个 4x1。或者也许是 1x4?通过以下行,我们确保我们从同一点开始:

A = A(:); % make sure A is columnar

A 是一个元胞数组,第一个元素包含名称,从第二个元素到最后一个元素包含数字作为字符串。


案例1:每个部分的大小一致:制作矩阵

在这里,我们将看到如何从这个元胞数组中提取所需的矩阵。

首先,我们需要strread从一个字符串中生成一个向量(你也可以使用textscan):

v = strread(A{2})

v =

     1     2     3     4

现在我们应该在每个单元格上应用这个函数并将向量组合成一个矩阵。这可以使用cellfun 来实现,但是由于我们必须首先生成一个元胞数组,所以最后我们需要一个cell2mat

M = cell2mat(cellfun(@strread, A(2:end), 'UniformOutput', false))

这里,M 是最终结果。

M =

     1     2     3     4
     5     6     8     8
     8     0     9     5

案例2:大小不一致+字符/数字组合:制作元胞数组

我们希望将数据转换为一个单元格数组,每个元素占用一个单元格。从celldata 的第一行开始,我们可以使用strsplit 将名称字符串分解为一个元胞数组:

celldata = strsplit(A{1});

% maximum data count in each cell of A
maxL = max(cellfun(@(x) numel(strsplit(x)), A));

% constructing an empty cell array to be filled with the data
% the importance of this step dramatically increases with the data size! 
celldata{numel(A), maxL} = [];

现在您可以通过celldata 并用正确的值填充它的单元格:

for ii = 2:numel(A)
    val = strread(A{ii});
    celldata(ii, 1:numel(val)) = num2cell(val);
end

celldata 是这种形式的元胞数组:

celldata = 

    'A'    'B'    'C'    'D'     []
    [1]    [2]    [3]    [4]     []
    [5]    [6]    [8]    [8]    [8]
    [8]    [0]    [9]    [5]     []
    [7]    [0]    [8]    [8]    [8]
    [5]    [0]    [9]    [9]     []

【讨论】:

  • 谢谢!请问可以再问一下吗?因为我意识到文本文件中的数据大小不定。就像'A B C D 1 2 3 4 5 6 9 8 8 8 8 0 9 5'。错误消息是“CAT 参数尺寸不一致。”
  • 欢迎您@Cii。 2个问题:除了最后一个之外,尺寸是否一致?在这种情况下,您更喜欢如何处理最后一个?删除它或用零 / NaN 扩展它?
  • 很抱歉刚才的评论无法显示数据集的大小。现在的数据是中间集又多了一个数据。所以现在它变成了 5,6,8,8,8,而不是 5,6,8,8。现在是 1x5 双倍,而其他的是 1x4 双倍。也许我编辑我的问题以便更好地显示矩阵。
猜你喜欢
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多