我有以下格式存储的数据,没有分隔符和数字域{0,1}。使用八度音程,取数字并将它们存储在martix中对我来说是一个问题。我没有管理下面的scnerio。那么,我怎样才能将这些数字存储在矩阵中,如下所述?
Data in File, 32 x 32 digits
00000000000000000000000000000000
00000000001111110000000000000000
...
00000010000000100001000000000000
how to store data
matrix[1, 1:32] = 00000000000000000000000000000000
matrix[2, 1:32] = 00000000001111110000000000000000
. . .
matrix[32, 1:32] = 00000010000000100001000000000000
OR
matrix[1, 1:32] = 00000000000000000000000000000000
matrix[1, 33:64] = 00000000001111110000000000000000
. . .
matrix[1, 993:1024] = 00000010000000100001000000000000
答案 0 :(得分:0)
一种可能的解决方案是首先将数据作为字符串读取:
octave> textread('foo.dat', '%s', 'headerlines', 2)
ans =
{
[1,1] = 00000000000000000000000000000000
[2,1] = 00000000001111110000000000000000
...
}
如果这些是小数的二进制表示,您可能会发现bin2dec()
有用。
答案 1 :(得分:0)
这可以解决问题(虽然我不知道fread
和arrayfun
的第三个输入与Octave一起使用的效果如何,在Matlab上进行了测试):
fid = fopen('a.txt','rt');
str = fread(fid,inf,'char=>char');
st = fclose(fid);
qrn = str==10|str==13;
str(qrn) = [];
yourMat = reshape(arrayfun(@str2num,str),find(qrn,1)-1,[]).'
答案 2 :(得分:0)
假设您没有标题行,您可以将文本作为字符串的字符串读取,如下所示:
C = textread('names.txt', '%s');
然后,通常对于从0到9的所有数字,您可以将其转换为如下矩阵:
M = vertcat(S{:})-'0';
如果性能是一个问题,您可以查看导入字符串的其他方法,但这应该可以完成工作。
答案 3 :(得分:0)
我从未使用过Matlab,但是假设它以与Octave相同的方式读取文件,如果使用外部工具就可以了,您可以尝试使用文本编辑器替换字符以添加分隔符。你可以改变每一个" 0"到" 0,"以及每一个" 1"到" 1,"然后只需加载文件。
(这会在每一行的末尾添加分隔符。如果产生问题,您可以尝试成对替换文本" 00" - >" 0,0& #34;" 10" - >" 1,0"依此类推)
如果文件对于普通编辑器来说太大,您甚至可以尝试用sed替换字符:
sed -i 's/charactertoreplace/newcharacter/g' yourfile.txt