Читать текстовые файлы, содержащие двоичные данные, как одну матрицу в 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
, наконец, суммируется по столбцам этого массива.