【问题标题】:read text files containing binary data as a single matrix in matlab在matlab中读取包含二进制数据的文本文件作为单个矩阵
【发布时间】:2012-10-03 09:35:52
【问题描述】:

我有一个包含二进制数据的文本文件,格式如下:

00000000000000000000000000000000001011111111111111111111111111111111111111111111111111111111110000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111000111100000000000000000000000000000000
00000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111000111110000000000000000000000000000000
00000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111110000000000000000000000000000000
00000000000000000000000000000000000000000000111111111111111111111111111111111111110000000011100000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111100111110000000000000000000000000000000
00000000000000000000000000000000000111111111111111111111111111111111111111111111111111110111110000000000000000000000000000000
00000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000000001111111111111111111111111111111111111111111111000011100000000000000000000000000000000
00000000000000000000000000000000000000001111111111111111111111111111111111111111111111000011100000000000000000000000000000000
00000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111000000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111110000011100000000000000000000000000000000
00000000000000000000000000000000000000000000011111111111111111111111111111111111100000000011100000000000000000000000000000000
00000000000000000000000000000000000000111111111111111111111111111111111111111111111111110111100000000000000000000000000000000

请注意,每个 1 或 0 都是独立的,即值不是十进制的。我需要找到文件的按列总和。一共125列,840946行。

我尝试了textreadfscanf 和其他一些matlab 命令,但结果是它们都以十进制格式读取每一行并创建一个840946x1 数组。我想创建一个840946x125 矩阵来计算列和。

【问题讨论】:

  • 假设您的代码中有错误。您应该能够阅读文本。可以展示一下吗?

标签: matlab file-io matrix


【解决方案1】:

您可以使用 textread 来执行此操作。只需读取字符串,然后使用 sscanf 处理它们,一次一个数字

A = textread('data.txt', '%s');
ncols = size(A, 1);
nrows = size(A{1}, 2);
A = reshape(sscanf([A{:}], '%1d'), nrows, ncols);

请注意,现在 A 已转置,即您有 125 行。

然后简单地计算按列的总和

colsum = sum(A);

【讨论】:

    【解决方案2】:

    这是一个有点 hack-ish 的方法:

    A = textread('data.txt', '%s');  
    
    colsum = sum(cat(1,A{:})-'0')
    

    细分:

    1. textread 会将每行 0 和 1 读取为单个字符串。因此,A 将是一个单元格字符串,每个元素都等于一个长度为 125 的字符串。
    2. cat(1,A{:}) 会将单元格字符串连接成大小为 840946×125 的“普通”Matlab 字符数组。
    3. 从任何包含 0 和 1 的字符数组中减去 ASCII 值“0”将返回它们的数字表示。例如,'a'-0 = 97,小写“a”的 ASCII 值。
    4. sum 最终将对该数组的列求和。

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多