exponenta event banner

Сортировка и печать данных MATLAB из Python

В этом примере показано, как сортировать данные о пациентах в списки курильщиков и некурящих в Python ® и строить графики показаний артериального давления для пациентов с MATLAB ®.

Запустите механизм и прочитайте данные о наборе пациентов в таблице MATLAB. MATLAB предоставляет образец файла с разделителями-запятыми, patients.dat, который содержит информацию о 100 различных пациентах.

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval("T = readtable('patients.dat');",nargout=0)

MATLAB readtable функция считывает данные в таблицу. Модуль не поддерживает тип данных таблицы MATLAB. Однако с MATLAB table2struct можно преобразовать таблицу в скалярную структуру, которая является типом данных, поддерживаемым механизмом.

eng.eval("S = table2struct(T,'ToScalar',true);",nargout=0)
eng.eval("disp(S)",nargout=0)
                    LastName: {100x1 cell}
                      Gender: {100x1 cell}
                         Age: [100x1 double]
                    Location: {100x1 cell}
                      Height: [100x1 double]
                      Weight: [100x1 double]
                      Smoker: [100x1 double]
                    Systolic: [100x1 double]
                   Diastolic: [100x1 double]
    SelfAssessedHealthStatus: {100x1 cell}

Вы можете пройти S из рабочей области MATLAB в сеанс Python. Двигатель преобразует S к словарю Python, D.

D = eng.workspace["S"]

S содержит поля, содержащие массивы. Модуль преобразует массивы ячеек в Python list переменные и числовые массивы в массивы MATLAB. Поэтому D["LastName"] имеет тип данных list, и D["Age"] имеет тип данных matlab.double.

Сортируйте показания артериального давления по спискам курильщиков и некурящих. В patients.dat, столбец Smoker указал курильщика с логическим 1 (истина) и некурящего с логическим 0 (ложь). Новообращенный D["Smoker"] в matlab.logical массив для сортировки.

smoker = matlab.logical(D["Smoker"])

Преобразовать Diastolic показания артериального давления и Smoker индикаторы в массивы 1 на 100 MATLAB для сортировки.

pressure = D["Diastolic"]
pressure.reshape((1,100))
pressure = pressure[0]
smoker.reshape((1,100))
smoker = smoker[0]

Сортировать pressure массив в списки показаний артериального давления для курильщиков и некурящих. Постижения списков Python обеспечивают компактный метод итерации над последовательностями. С Питоном zip функция, можно выполнить итерацию по нескольким последовательностям в одной for цикл.

sp = [p for (p,s) in zip(pressure,smoker) if s is True]
nsp = [p for (p,s) in zip(pressure,smoker) if s is False]

Отображение длины sp, показания артериального давления для курильщиков в list.

print(len(sp))
34

Отображение длины nsp, list показаний для некурящих.

print(len(nsp))
66

Рассчитайте средние показания артериального давления для курильщиков и некурящих. Новообращенный sp и nsp в массивы MATLAB перед их передачей в MATLAB mean функция.

sp = matlab.double(sp)
nsp = matlab.double(nsp)
print(eng.mean(sp))
89.9117647059

Показать среднее кровяное давление для некурящих.

print(eng.mean(nsp))
79.3787878788

Постройте график показаний артериального давления для курильщиков и некурящих. Чтобы определить две оси X для печати, вызовите MATLAB linspace функция. Вы можете построить графики 34 курильщиков и 66 некурящих на одном и том же участке рассеяния.

sdx = eng.linspace(1.0,34.0,34)
nsdx = eng.linspace(1.0,34.0,66)

Показать границы осей с помощью box функция.

eng.figure(nargout=0)
eng.hold("on",nargout=0)
eng.box("on",nargout=0)

Вы должны позвонить figure, hold, и box функции с nargout=0, поскольку эти функции не возвращают выходные аргументы.

Постройте график показаний артериального давления для курильщиков и некурящих и пометьте график. Для многих функций MATLAB механизм может вернуть дескриптор графическому объекту MATLAB. Можно сохранить дескриптор объекта MATLAB в переменной Python, но нельзя управлять свойствами объекта в Python. Объекты MATLAB можно передавать в качестве входных аргументов другим функциям MATLAB.

eng.scatter(sdx,sp,10,'blue')
<matlab.object object at 0x22d1510>

В остальном примере присвойте выходной аргумент функций MATLAB h в качестве местозаполнителя.

h = eng.scatter(nsdx,nsp,10,'red')
h = eng.xlabel("Patient (Anonymized)")
h = eng.ylabel("Diastolic Blood Pressure (mm Hg)")
h = eng.title("Blood Pressure Readings for All Patients")
h = eng.legend("Smokers","Nonsmokers")

Проведите линии, показывающие средние показания артериального давления для курильщиков и некурящих.

x = matlab.double([0,35])
y = matlab.double([89.9,89.9])
h = eng.line(x,y,"Color","blue")
h = eng.text(21.0,88.5,"89.9 (Smoker avg.)","Color","blue")
y = matlab.double([79.4,79.4])
h = eng.line(x,y,"Color","red")
h = eng.text(5.0,81.0,"79.4 (Nonsmoker avg.)","Color","red")

См. также

|