Calling Matlab function from python: “initializer must be a rectangular nested sequence”
I am writing a python script from which I hope to call the Matlab anovan function. I have attempted a basic test of this feature on file test.txt.
This file is imported as array data. In matlab, the anovan function would be called as follows:
anovan(data(:,1),{data(:,2),data(:,3)})In python, I have attempted to call the function like this:
import matlab.engine
eng = matlab.engine.start_matlab() 
data = np.genfromtxt('test.txt')
eng.anovan(matlab.double(data[:,0]),matlab.int8(data[:,1:2]))Unfortunately, this gives the following error:
ValueError: initializer must be a rectangular nested sequenceI can see that there is some issue in passing the last two array columns to the function, but am unsure of the solution. Any suggestions would be appreciated.
I have now worked this out. The issue was in the format of the data passed to the function.
#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)])作者:jsp
-------------------------------------------
个性签名:无论在哪里做什么,只要坚持服务、创新、创造价值,其它的东西自然都会来的。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号