Трудно сказать из вашего поста, что является форматом ввода и каков ваш желаемый формат вывода.
Я приведу пример чтения всех файлов .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
:
A0002.mat
:
График с метками:
# 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"
Результат: