2015-11-08 3 views
0

У меня есть двоичная квадратная матрица со сложными значениями, хранящаяся в формате .bin. Я пытался читать это 100-на-100 матрицы с помощью сценария Matlab:Чтение двоичной матрицы из файла в Matlab

i=fopen('matrix.bin','r') 
A=fread(i,[100 100] 

Этот код не правильно читать сложные значения, содержащиеся в A. Я получаю только матрицу целых чисел 100 на 100.

+0

Опечатка в моем коде: i = fopen ('matrix.bin', 'r') A = fread (i, [100 100]) – Maya

+0

Каков формат вашего файла 'bin'? Как хранятся сложные данные? – rayryeng

+0

Файл bin генерируется калькулятором, который содержит сложную матрицу, и невозможно отобразить содержимое этого файла. Что вы подразумеваете под форматом bin? – Maya

ответ

0

MATLAB fread поддерживают типы ANSI C, но нет родных типов ANSI C, которые представляют собой комплексные числа. Скорее всего, сложное число сохраняется как пара реальных и мнимых чисел.

Без информации о том, как сохраняется двоичный файл, вы все равно можете выполнить некоторый тест, чтобы понять это. Если комплексное число представлено как действительная часть и мнимая часть, и как в точности double, тогда одно комплексное число будет занимать 8 + 8 = 16 байт. Мы можем проверить это, перейдя в конец файла и посмотрим, сколько там байтов.

fID = fopen('matrix.bin','r') 
fseek(fID, 0, 'eof')  % Go to the end of file 
ftell(fID)    % Tell current position in the open file 
fclose(fID) 

Если это число равно 16 * 100 * 100 = 160000, то вам повезло. Там нет дополнительный материал сохраняется в этом файле, и вы можете просто прочитать данные с помощью этого кода:

fID = fopen('matrix.bin','r') 
data = [] 
for ii = 1:10000 
    data = [data; fread(fID, 2, 'double')'] 
end 
fclose(fID) 

Вы будете в конечном итоге с массивом 10000 * 2, с каждой строкой, представляющей собой комплексное число. Если размер файла равен 80000, то реальную и мнимую часть можно сохранить в виде данных single. Если размер файла - это какое-то другое число, то, вероятно, это означает, что в двоичном файле хранится дополнительная информация. Вам нужно знать, какая дополнительная информация хранится, чтобы вы могли правильно прочитать файл.

Смежные вопросы