这个例子展示了如何在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)”、“颜色”、“红色”)