zoukankan      html  css  js  c++  java
  • 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 sequence

    I 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)])
  • 相关阅读:
    APP专项测试方法有哪些?
    软件测试基础知识
    软件测试入门随笔——软件测试基础知识
    如何做接口测试
    App测试页面滑动
    什么是接口测试
    自动化测试
    测试用例设计方法
    Monkey测试手机BUG重现及解决方法
    软件测试工程师需要具备哪些数据库知识
  • 原文地址:https://www.cnblogs.com/jingsupo/p/9238031.html
Copyright © 2011-2022 走看看