Как загрузить .mat Папка и файлы - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь загрузить набор данных .mat в мой фрейм данных. Таким образом, я могу загрузить только один файл за раз из папки TrainingSet1 с

 os.chdir('/Users/Ashi/Downloads/TrainingSet2')
 data = loadmat('A2001.mat') 

И я могу видеть данные в нем, но как мне загрузить всю папку TrainingSet1? , так что я могу просмотреть все это. Кроме того, как я могу просмотреть файлы .mat в виде изображений?

Вот мой код,

%reload_ext autoreload
   %autoreload 2
   %matplotlib inline 

   from fastai.vision import *
   from fastai.metrics import error_rate
   from mat4py import loadmat
   from pylab import*
   import matplotlib
   import os

   os.chdir('/Users/Ashi/Downloads/TrainingSet2')

   data = loadmat('A2001.mat')
   data
   {'ECG': {'sex': 'Male', 'age': 68,
     'data': [[0.009784321006571624,
    0.006006033870606647,
   ...This is roughly how the data looks like   

   imshow('A2001.mat',[])  
   ---------------------------------------------------------------            
   TypeError      Traceback (most recent call last)
   <ipython-input-52-23bbdf3a7668> in <module>
   ----> 1 imshow('A2001.mat',[])...A long error is displayed
   TypeError: unhashable type: 'list'

Спасибо за любую помощь

1 Ответ

0 голосов
/ 09 апреля 2020

Трудно сказать из вашего поста, что является форматом ввода и каков ваш желаемый формат вывода.

Я приведу пример чтения всех файлов .mat в папке и пример показа data['data'] в качестве изображения.

Надеюсь, этого примера достаточно, чтобы вы продолжали продвигаться самостоятельно.

Я создал образец набора данных 'A2001.mat', 'A2002.mat', 'A2003.mat' с использованием MATLAB.
Если у вас установлена ​​программа MATLAB, я рекомендую вам выполнить следующий код для создания образца ввода (для того, чтобы образец Python был воспроизводимым):

ECG.sex = 'Male';
ECG.age = 68;
data = im2double(imread('cameraman.tif')) / 10; % Divide by 10 for simulating range [0, 0.1] instead of [0, 1]   
save('A2001.mat', 'ECG', 'data');

ECG.sex = 'Male';
ECG.age = 46;
data = im2double(imread('cell.tif'));
save('A2002.mat', 'ECG', 'data');

ECG.sex = 'Female';
ECG.age = 54;
data = im2double(imread('tire.tif'));
save('A2003.mat', 'ECG', 'data');

Python Пример кода выполняет следующие действия:

  • Получить список всех mat файлов в папке, используя glob.glob('*.mat').
  • Итерация mat файлов, загрузка данных из файлов и добавление данных в список.
    Результатом l oop является список с именем alldata, содержащий данные из всех mat файлов.
  • Итерация alldata и отображение data['data'] в виде изображения.
    (Предположим, data['data'] - это матрица, которую вы хотите отобразить в виде изображения).

Вот код:

from matplotlib import pyplot as plt
from mat4py import loadmat
import glob
import os

os.chdir('/Users/Ashi/Downloads/TrainingSet2')

# Get a list for .mat files in current folder
mat_files = glob.glob('*.mat')

# List for stroring all the data
alldata = []

# Iterate mat files
for fname in mat_files:
    # Load mat file data into data.
    data = loadmat(fname)

    # Append data to the list
    alldata.append(data)


# Iterate alldata elelemts, and show images
for data in alldata:
    # Assume image is stored in matrix named data in MATLAB.
    # data['data'], access data with string 'data', becuase data is a dictionary
    img = data['data']

    # Show data as image using matplotlib
    plt.imshow(img, cmap='gray')
    plt.show(block=True) # Show image with "blocking"

Обновление:

Данные ЭКГ - это не изображение, а список из 12 образцов данных.

Внутренняя структура данных (после data = loadmat(fname)):

  • Родительский словарь с именем data.
    • data содержит словарь в data['ECG'].
      • data['ECG']['data'] - список из 12 списков.

Следующий код повторяет файлы mat и отображает данные ЭКГ в виде графика:

from matplotlib import pyplot as plt
from mat4py import loadmat
import glob
import os
import numpy as np

os.chdir('/Users/Ashi/Downloads/TrainingSet2')

# Get a list for .mat files in current folder
mat_files = glob.glob('*.mat')

# List for stroring all the data
alldata = []

# Iterate mat files
for fname in mat_files:
    # Load mat file data into data.
    data = loadmat(fname)

    # Append data to the list
    alldata.append(data)


# Iterate alldata elelemts, and show images
for data in alldata:
    # The internal structure of the data is a dictionary with a dictionary.
    ecg = data['ECG']
    data = ecg['data'] # Data is a list of lists

    # Convert data to NumPy array
    ecg_data = np.array(data)

    # Show data as image using matplotlib
    #plt.imshow(img, cmap='gray')
    plt.plot(ecg_data.T)  # Plot the data as graph.
    plt.show(block=True)  # Show image with "blocking"

Результат:

A0001.mat:
enter image description here

A0002.mat:
enter image description here


График с метками:

# Iterate alldata elements, and show images
for data in alldata:
    # The internal structure of the data is a dictionary with a dictionary.
    ecg = data['ECG']
    data = ecg['data'] # Data is a list of lists

    # Convert data to NumPy array
    #ecg_data = np.array(data)

    # Show data as graph using matplotlib
    # Iterate data list:
    for i in range(len(data)):
        # Plot the data as graph.
        # Set labels d0, d1, d2...
        plt.plot(data[i], label='d'+str(i))

    plt.legend()  # Add legend
    plt.show(block=True)  # Show image with "blocking"

Результат:
enter image description here

...