如何将Python列表转换为列向量?
我在Python中使用MATLAB中的fitdist方法,其中x为: 我尝试了不同的方法来解决这个问题,它们都给出了相同的错误:如何将Python列表转换为列向量?,python,matlab,Python,Matlab,我在Python中使用MATLAB中的fitdist方法,其中x为: 我尝试了不同的方法来解决这个问题,它们都给出了相同的错误: eng.fitdist(eng.cell2mat(list(x)), 'stable') eng.fitdist(matlab.double(list(x)), 'stable') eng.fitdist(list(x), 'stable') 所有这些都给了我一个错误: MatlabExecutionError: File C:\Program
eng.fitdist(eng.cell2mat(list(x)), 'stable')
eng.fitdist(matlab.double(list(x)), 'stable')
eng.fitdist(list(x), 'stable')
所有这些都给了我一个错误:
MatlabExecutionError:
File C:\Program Files\MATLAB\R2020b\toolbox\stats\stats\fitdist.m, line 126, in fitdist X must be a numeric column vector.
你知道怎么摆脱它吗?如何将列表转换为使用MATLAB的列向量?
我使用的是MATLAB R2020b您可以使用
MATLAB.double
的size
参数来创建列向量
MATLAB中的列向量等价于二维矩阵,其第二维度大小等于1。例如:大小为
[5,1]
的矩阵是包含5列的列向量
根据文档,:matlab.double
有一个可选的size
参数:
double(初始值设定项=None,size=None,is_complex=False)
您可以将size
参数设置为(x.size,1)
,以创建列向量
以下语法有效(假设x是NumPy数组):
以下语法也适用:
eng.fitdist(matlab.double(list(x), (len(list(x)), 1)), 'stable')
以下代码用于测试:
将numpy导入为np
导入matlab
导入matlab.engine
eng=matlab.engine.start\u matlab()
x=np.数组([176.0163.0131.0133.01119.0142.0142.0180.0183.0132.0128.0137.0174.0])
eng.fitdist(matlab.double(列表(x),(x.size,1)),“稳定”)
更新: 在Python中读取
fitdist
的结果:
读取结果是一项挑战,因为fitdist
返回类型为'prob.stableddistribution'
的对象 以数组的形式获取结果会更容易。
我的建议是创建一个返回数组的MATLAB“包装函数” 例如: 材料代码文件
my\u fitdist.m
:
函数y=my_fitdist(x)
如果(尺寸(x,1)=1),x=x;end%确保输入是列数组。
s=fitdist(x,‘稳定’);
y=[s.alpha,s.beta,s.gam,s.delta];%将fitdist的输出放入一个数组中
Python代码:
将numpy导入为np
导入matlab
导入matlab.engine
eng=matlab.engine.start\u matlab()
x=np.数组([176.0163.0131.0133.01119.0142.0142.0180.0183.0132.0128.0137.0174.0])
y=eng.my_fitdist(matlab.double(list(x))#执行包装函数“my_fitdist”
可能有更好的解决方案,但我对MATLAB引擎没有经验。谢谢!这绝对解决了我的问题。只是想知道你是否知道如何用Python访问结果?我试图看到计算出的alpha,但我不知道怎么看。我是MATLAB新手:)使用MATLAB“包装器函数”是一个可能的解决方案(我更新了帖子)。刚刚测试过,效果很好,谢谢!
eng.fitdist(matlab.double(list(x), (len(list(x)), 1)), 'stable')