2017-02-04 3 views
0

Я создал матрицу размером 500x500 в C, которая составляет около 1 МБ, если кто хочет видеть -> (http://www.megafileupload.com/8mad/test). Мне нужно прочитать его в Matlab, чтобы я мог визуализировать его с помощью imagesc. Предполагается, что это будет произведение с математикой, и мне очень любопытно посмотреть, как это выглядит.Как прочитать выходной файл C в Matlab

До сих пор я попытался это:

fid = fopen('test', 'r') 
mydata = fread(fid, 'double') 

но это на самом деле не работает.

С другой стороны, если кто-то может предложить другой способ написать файл, так что это больше приветствуется Matlab.

В моем файле в основном содержится матрица с элементами 500x500 из integer.

Это, как я сохранить его на C:

if(fwrite(img, sizeof(int), w*h, fp) != w*h) 
    printf("File write error."); 
    fclose(fp); 
+0

'MYDATA = Fread (FID, 'двойной')' 'ожидает double' не' int'. Это должно быть проблемой. –

+0

@ Jean-FrançoisFabre Вот и все, спасибо вам большое! Есть еще одна проблема, она читает ее как список, то есть 250000x1. –

+0

проверить мой обновленный ответ. –

ответ

0

вы создаете двоичный файл, содержащий целые числа. Я предполагаю, что это 32-битные целые числа (вам нужно будет проверить это со стороны C или использовать stdint.h и тип int32_t).

Если у вас есть 32-битные целые числа хранятся, вы можете прочитать файл MatLab так же, как вы делаете, но используя правильный тип:

mydata = fread(fid, 'int32') 

еще MATLAB сопоставит целочисленные значения 2 на 2 в парном и вы, вероятно, получите значения 0 или NaN.

Затем вы получаете массив 1D, чтобы преобразовать ваш массив в 2D-массив, посмотрите на функцию reshape. Проверьте это, например, answer.

1

Проверьте следующее:

  1. Открыть файл Test для чтения.
  2. Прочитано 500x500 элементов типа int32 в матрицу I.
  3. Закрыть файл.
  4. Транспонирование матрицаI - потому что 2D массивы C являются row major и матрицы MATLAB являются колонками основнымов, вам необходимо транспонировать матрицу написанной в C и читать в среде MATLAB.
  5. Отобразите изображение, используя imagesc.

f = fopen('Test', 'r'); 
I = fread(f, [500, 500], 'int32'); 
fclose(f); 
I = I'; 
imagesc(I); 

enter image description here

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