从python调用Matlab函数:“初始值设定项必须是矩形嵌套序列”

2024-10-01 15:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python脚本,我希望从中调用matlabanovan函数。 我尝试对文件test.txt进行此功能的基本测试,该文件包含3列:

1.472008228227131532e+01 1.000000000000000000e+00 1.000000000000000000e+00
1.423892587976163249e+01 2.000000000000000000e+00 1.000000000000000000e+00
1.434051782779769013e+01 3.000000000000000000e+00 1.000000000000000000e+00
1.478373164841650045e+01 4.000000000000000000e+00 1.000000000000000000e+00
1.463143763527341612e+01 5.000000000000000000e+00 1.000000000000000000e+00
1.580723346731706513e+01 6.000000000000000000e+00 1.000000000000000000e+00
1.964295632547030124e+01 1.000000000000000000e+00 2.000000000000000000e+00
1.922724696768608510e+01 2.000000000000000000e+00 2.000000000000000000e+00
1.886686329445662480e+01 3.000000000000000000e+00 2.000000000000000000e+00
1.960702674675711066e+01 4.000000000000000000e+00 2.000000000000000000e+00
1.983434584140020007e+01 5.000000000000000000e+00 2.000000000000000000e+00
2.050709640103466569e+01 6.000000000000000000e+00 2.000000000000000000e+00

此文件作为数组data导入。 在matlab中,anovan函数的调用如下:

^{pr2}$

在python中,我尝试如下调用函数:

import matlab.engine
eng = matlab.engine.start_matlab() 
data = np.genfromtxt('test.txt')
eng.anovan(matlab.double(data[:,0]),matlab.int8(data[:,1:2]))

不幸的是,这会产生以下错误:

ValueError: initializer must be a rectangular nested sequence

我可以看到将最后两个数组列传递给函数时存在一些问题,但不确定解决方案。如有任何建议,我们将不胜感激。在


Tags: 文件函数test功能txt脚本data数组
2条回答

我现在已经解决了。问题在于传递给函数的数据格式。在

#convert grouping columns to integer lists
list1 = data[:,1].tolist()
for i in range(0,len(list1)):                                                                                  
    list1[i] = int(list1[i])
list2 = data[:,2].tolist()
for i in range(0,len(list2)):                                                                                  
    list2[i] = int(list2[i])
#The following command now works
eng.anovan(matlab.double(data[:,0].tolist()),[matlab.int8(list1),matlab.int8(list2)])

是的,在MATLAB中传递给函数的参数应该是这种类型: matlab.double([parameter]),无论参数最初是什么类型的,都需要一个[]

相关问题 更多 >

    热门问题