主要内容

排序和情节MATLAB数据从Python

这个例子展示了如何在Python中将病人的数据排序为吸烟者和非吸烟者的列表®用MATLAB为患者绘制血压读数®

启动引擎,并将一组患者的数据读取到MATLAB表中。MATLAB提供了一个示例逗号分隔文件,patients.dat,其中包含100个不同病人的信息。

导入matlab。Engine eng = matlab.engine.start_matlab() eng。eval (T = readtable (patients.dat);“,nargout = 0)

MATLABreadtable函数将数据读入表。该引擎不支持MATLAB表数据类型。金宝app然而,用MATLABtable2struct函数可以将表转换为标量结构,这是引擎支持的一种数据类型。金宝app

eng。eval("S = table2struct(T,'ToScalar',true);",nargout=0) engl .eval("disp(S)",nargout=0)
LastName: {100x1 cell}性别:{100x1 cell}年龄:[100x1 double]位置:{100x1 cell}身高:[100x1 double]体重:[100x1 double]吸烟者:[100x1 double]收缩压:[100x1 double]舒张压:[100x1 double]自我评估健康状态:{100x1 cell}

你可以通过年代从MATLAB工作空间到Python会话。引擎转换年代到Python字典,D

D = eng.workspace(“S”)

年代具有包含数组的字段。该引擎将单元格数组转换为Python列表变量和数值数组到MATLAB数组。因此,D(“姓”)是数据类型列表,D(“时代”)是数据类型matlab.double

将血压读数按吸烟者和非吸烟者分类。在patients.dat,列吸烟者用逻辑1 (true)表示吸烟者,用逻辑0 (false)表示不吸烟者。转换D(“烟民”)到一个matlab.logical数组进行排序。

吸烟者= matlab.logical (D(“烟民”))

转换舒张压血压读数和吸烟者指示器进入1 × 100的MATLAB数组进行排序。

压力= D[“舒张”]压力。重塑((1100))压力=压力吸烟者。重塑((1100))吸烟者=吸烟者

排序压力将吸烟者和非吸烟者的血压读数排列成列表。Python列表推导式提供了在序列上迭代的紧凑方法。与Python邮政编码函数中,可以在单个序列中迭代多个序列循环。

sp = [p for (p,s) in zip(pressure,吸烟者)if s is True]

显示长度sp,吸烟者的血压读数列表

打印(len (sp))
34

显示长度规划的,列表不吸烟者的读数。

print (len (nsp))
66

计算吸烟者和不吸烟者的平均血压读数。转换sp规划的,然后将它们传递给MATLAB的意思是函数。

Sp = matlab.double(Sp) NSP = matlab.double(NSP) print(eng.mean(Sp))
89.9117647059

显示不吸烟者的平均血压。

print (eng.mean (nsp))
79.3787878788

绘制吸烟者和不吸烟者的血压读数。定义两个x-坐标轴的绘图,调用MATLABlinspace函数。你可以在同一个散点图上标出34个吸烟者和66个非吸烟者。

SDX = engx .linspace(1.0,34.0,34)

盒子函数。

eng.figure (nargout = 0) eng.hold(“在”,nargout = 0) eng.box(“在”,nargout = 0)

你必须打电话给数字持有,盒子功能与nargout = 0,因为这些函数不返回输出参数。

绘制吸烟者和非吸烟者的血压读数,并标记该图。对于许多MATLAB函数,引擎可以返回一个MATLAB图形对象的句柄。您可以将MATLAB对象的句柄存储在Python变量中,但不能在Python中操作对象属性。您可以将MATLAB对象作为输入参数传递给其他MATLAB函数。

eng.scatter(有关,sp 10“蓝色”)
< matlab。对象对象在0x22d1510>

在本例的其余部分中,将MATLAB函数的输出参数赋给h作为一个占位符。

H = eng.scatter(nsdx,nsp,10,'red')xlabel("患者(匿名)")h = eng. xlabel("患者(匿名)")ylabel(“舒张压(mm Hg)”)h = eng。标题(“所有患者的血压读数”)h = eng.legend(“吸烟者”,“不吸烟者”)

用线条标出吸烟者和非吸烟者的平均血压读数。

x = matlab.double ([0, 35]) y = matlab.double ([89.9, 89.9]) h = eng.line (x, y,“颜色”,“蓝色”)h = eng.text(21.0, 88.5, 89.9(吸烟者avg。)”、“颜色”、“蓝色”)y = matlab.double ([79.4, 79.4]) h = eng.line (x, y,“颜色”,“红”)h = eng.text(5.0, 81.0,“79.4(不抽烟的avg)”、“颜色”、“红色”)

所有病人的血压读数图。

另请参阅

|