Как преобразовать файл .dat в массив NumPy? - PullRequest
0 голосов
/ 28 апреля 2020

Для моего задания мне необходимо прочитать матричные данные из файлов (Phase.dat и Magnitude.dat), которые содержат комплексные числа для восстановления изображения по отдельным данным. т.е. восстановление изображения по фазе и величине в отдельности. Но я не могу правильно прочитать данные из файла. Я попробовал какое-то решение из здесь , но решение выдает ошибку. Мой желаемый вывод имеет вид матрицы, похожую на

( [ 1.0, 3.5, 5.4, 7.9 ],
  [ 9.0, 2.5, 4.2, 3.6 ],
  [ 1.5, 3.2, 1.6, 6.5 ] )

Первый метод:

x  = np.fromfile('Phase.dat', dtype=np.uint8)

Выход:

array([ 77,  65,  84, ..., 115, 128,  63], dtype=uint8)

Второй метод:

data = np.genfromtxt('Phase.dat',
                     skip_header=1,
                     skip_footer=1,
                     names=True,
                     dtype=None,
                     delimiter=' ')

Ошибка: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 160: invalid start byte

Третий метод:

import numpy as np

def is_float(string):
    """ True if given string is float else False"""
    try:
        return float(string)
    except ValueError:
        return False

data = []
with open('Phase.dat', 'r') as f:
    d = f.readlines()
    for i in d:
        k = i.rstrip().split(",")
        data.append([float(i) if is_float(i) else i for i in k]) 

data = np.array(data, dtype='O')

Ошибка: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 160: invalid start byte

Любые предложения о том, где я иду не так? Спасибо за вашу помощь!

Обновление:

Я предоставил скриншот из моего редактора Matlab, как выглядит матрица, и выделил ее размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...