use*_*595 10 file-io matlab matrix
我有一个文本文件,其中包含以下方式的二进制数据:
00000000000000000000000000000000001011111111111111111111111111111111111111111111111111111111110000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111000111100000000000000000000000000000000
00000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111000111110000000000000000000000000000000
00000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111110000000000000000000000000000000
00000000000000000000000000000000000000000000111111111111111111111111111111111111110000000011100000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111111100111110000000000000000000000000000000
00000000000000000000000000000000000111111111111111111111111111111111111111111111111111110111110000000000000000000000000000000
00000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000
00000000000000000000000000000000000000001111111111111111111111111111111111111111111111000011100000000000000000000000000000000
00000000000000000000000000000000000000001111111111111111111111111111111111111111111111000011100000000000000000000000000000000
00000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111000000000000000000000000000000000
00000000000000000000000000000000000000011111111111111111111111111111111111111111111110000011100000000000000000000000000000000
00000000000000000000000000000000000000000000011111111111111111111111111111111111100000000011100000000000000000000000000000000
00000000000000000000000000000000000000111111111111111111111111111111111111111111111111110111100000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
请注意,每个1或0都是独立的,即值不是小数.我需要找到文件的列方式总和.总共有125列,有840946行.
我试过了textread,fscanf还有一些其他matlab命令,但结果是它们都以十进制格式读取每一行并创建一个840946x1数组.我想创建一个840946x125矩阵来计算列式和.
您可以使用textread来执行此操作.只需读取字符串,然后使用sscanf处理它们,一次一个数字
A = textread('data.txt', '%s');
ncols = size(A, 1);
nrows = size(A{1}, 2);
A = reshape(sscanf([A{:}], '%1d'), nrows, ncols);
Run Code Online (Sandbox Code Playgroud)
请注意,现在A是转置的,即您有125行.
然后简单地通过计算列的和
colsum = sum(A);
Run Code Online (Sandbox Code Playgroud)
这是一个有点黑客攻击的方法:
A = textread('data.txt', '%s');
colsum = sum(cat(1,A{:})-'0')
Run Code Online (Sandbox Code Playgroud)
分解:
textread将读取0和1的每一行作为单个字符串.A因此将是一个单元串,每个元素等于一个长度为125的字符串.cat(1,A{:}) 将单元串连接成大小为840946×125的"普通"Matlab字符数组. 'a'-0 = 97小写"a"的ASCII值.sum 最后将总结这个数组的列.