Как я могу прочитать .raw файл в программе на Фортране? - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю со старым конечно-элементным кодом в Фортране.Это исследовательский проект в университете.

У меня есть файл .raw , представляющий изображение в 3D.

Данные в файле .raw хранятся в uint16 или uint8 , и общее число целых чисел известно.

Как можно прочитать это изображение в массив целых чисел в программе на Фортране?

Что-то в этом роде

allocate(imgarray(total_int))
call raw2array(filename,imgarray)

В настоящее время я использую Python дляпрочитать изображение и преобразовать его в вектор целых чисел.Этот вектор читается на Фортране с текстовым файлом.

В python

imgarray = np.fromfile(fid, dtype=np.uint16,count=total_int,sep='')

Но при чтении файлов размером более 1000x1000x1000 целые числапроцесс становится очень медленным.

Проект требует, чтобы изображение .raw было прочитано в двоичном формате, в программе на Фортране как подпрограмма, которая завершает вектор.

Какя могу прочитать это изображение (в двоичном виде) и преобразовать его в вектор целых чисел, используя подпрограмму в Фортране?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Из решения, данного @agentp, файл .raw читается в массиве как:

use iso_fortran_env
implicit none
integer(kind=INT16), allocatable::m(:)
integer total_int
total_int = 1000*1000*1000
allocate(m(total_int))
open(100,file='test.raw',access='stream')
read(100)m
0 голосов
/ 26 апреля 2018

, если ваш компилятор поддерживает 16-битные целые числа и доступ к потоку, это так просто, как этот

   use iso_fortran_env
   implicit none
   integer(kind=INT16), allocatable::m(:,:,:)
   allocate(m(1000,1000,1000))
   open(100,file='test.raw',access='stream')
   read(100)m
   end
...