【问题标题】:Matlab import binary as matrixMatlab将二进制导入为矩阵
【发布时间】:2015-03-03 19:46:53
【问题描述】:

我有一个 .txt 文件,其中包含如下数据:

0000000011111000
0000001110001110
0000011000011111
0001110000000001
0011000000000001
0011000000000001
0110000000000001
0100000000000001
1100000000000001
1100000000000001
1000000000000001
1100000000000010
1100000000000110
0100000000001100
0110000000011000
0011111111110000
0
//repeats like this

末尾的 0 是描述 0 和 1 的 16x16 矩阵的标签。如您所见,它实际上是 0 的二进制图像。

我需要将此文件加载为 16x16 矩阵。我试过importdatatextscanfscanf,但没有一个对我有用。

文件以这种格式继续。

我最初的想法是使用 '' 作为importdata 的分隔符,但这没有奏效。 有没有办法做到这一点?

【问题讨论】:

  • 将每一行读取为文本并通过bin2dec进行转换?你期望什么输出?
  • 为什么这些功能对您不起作用? Matlab 不支持提供这么多处理位图的方法,我认为您需要将其作为字符串读取,然后将其转换为数字。我假设最后的 0 表示文件结束,对吗?

标签: matlab


【解决方案1】:

这是读取文件的一种方式(有关某些文档,请参阅here):

fid=fopen(textfile);
dat = textscan(fid,'%s',-1);   % <-- read into cell array of strings
fclose(fid);

dat=char(dat);    % <-- concatenate the strings into one char array
dat = double(dat)- '0'; % <-- convert to numeric 0/1 (48 = '0'+0)

最后一行将包含表示的数字(“0”)和多余的东西,您可以使用例如删除dat(end,:)=[];
快乐的小径!


编辑:虽然发布的答案适用于我使用的输入文本文件和输入法,但对于 OP,代码需要修改(可能是由于输入格式不同):

i = 1 : length (dat{1,1}) 
   result(i,:) = double(char(dat{1,1}{i,1})) - '0';
end

【讨论】:

  • 感谢您的回答,几乎成功了!第一行存储在 dat{1,1}{1,1} 中。因此,如果您可以使用 for i = 1 更新片段: length (dat{1,1}) result(i,:) = double(char(dat{1,1}{i,1})) - '0' ;我会将答案标记为已接受。
  • @wrecker 所以你不使用dat=char(dat)这行吗?我发布的代码非常适合我,你运行它时遇到什么错误?
  • 它给出了以下错误“错误使用字符单元格元素必须是字符数组。”
  • 是的,就像你的回答一样,同意很奇怪
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 2023-03-17
  • 2019-05-02
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2015-06-01
  • 2020-04-21
相关资源
最近更新 更多