10

次の方法でバイナリ データを含むテキスト ファイルがあります。

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

1 または 0 はそれぞれ独立していることに注意してください。つまり、値は 10 進数ではありません。ファイルの列ごとの合計を見つける必要があります。全部で 125 列あり、840946 行あります。

textread、および他のいくつかのmatlabコマンドを試しfscanfましたが、その結果、すべての行が10進形式で読み取られ、840946x1配列が作成されます。840946x125列ごとの合計を計算する行列を作成したいと考えています。

4

2 に答える 2

6

textread を使用してそれを行うことができます。文字列を読み取り、後で sscanf で一度に 1 桁ずつ処理する

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);
于 2012-10-03T09:51:52.447 に答える
5

これは少しハックっぽいアプローチです:

A = textread('data.txt', '%s');  

colsum = sum(cat(1,A{:})-'0')

壊す:

  1. textread0 と 1 の各行を 1 つの文字列として読み取ります。Aしたがって、各要素が長さ 125 の文字列に等しいセル文字列になります。
  2. cat(1,A{:})セル文字列をサイズ 840946 行 125 列の「通常の」Matlab 文字配列に連結します。
  3. 0 と 1 で構成される任意の文字配列から ASCII 値 '0' を減算すると、それらの数値表現が返されます。たとえば、'a'-0 = 97小文字の 'a' の ASCII 値。
  4. sum最後に、この配列の列を合計します。
于 2012-10-03T10:15:08.070 に答える