Читать текстовые файлы, содержащие двоичные данные, как одну матрицу в matlab

У меня есть текстовый файл, который содержит двоичные данные следующим образом:

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

Обратите внимание, что каждый 1 или 0 независим. Значения не являются десятичными. Мне нужно найти мудрую сумму в столбце файла. Всего 125 столбцов и 840946 строк.

Я пробовал textread, fscanf и несколько других команд matlab, но в результате все они читают каждую строку в десятичном формате и создают массив 840946x1. Я хочу создать матрицу 840946x125 для вычисления суммы столбца.

Ответ 1

Для этого вы можете использовать текстуру. Просто прочитайте строки, а затем обработайте их с помощью 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

Здесь немного взломанный подход:

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

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

Разбивка:

  • textread будет читать каждую строку из 0 и 1 как одну строку. Таким образом, A будет строкой ячейки, каждый элемент которой равен строке длиной 125.
  • cat(1,A{:}) будет конкатенировать строку ячейки в "нормальный" массив символов Matlab размером 840946 на 125.
  • Вычитая значение ASCII '0' из любого массива символов, состоящего из 0 и 1, вернет их числовое представление. Например, 'a'-0 = 97, значение ASCII для нижнего регистра "a".
  • sum, наконец, суммируется по столбцам этого массива.