如何将Python列表转换为列向量?

如何将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

我在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 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')