creating Matlab cell arrays in python

前端 未结 1 1927
太阳男子
太阳男子 2020-12-17 03:58

I\'m trying to create a Matlab cell array in python and save it as a .mat file, but am running into problems when all the cells contain 2 values:

import scip         


        
1条回答
  •  囚心锁ツ
    2020-12-17 04:15

    When you do this:

    a = np.array([[np.array([[2, 2]]), np.array([[3, 3]])]])
    

    the final call to np.array actually concatenates the inner two, so you get one array at the end:

    >>> a
    array([[[[2, 2]],
    
            [[3, 3]]]])
    
    >>> a.shape
    (1, 2, 1, 2)
    

    But to mimic a cell array you want to basically have an array of arrays. You can acheive this by setting dtype=object, but you must create the array and set the elements separately to avoid the automatic merging.

    three = array([[array([[2, 2, 2]]), array([[3, 3]])]])
    two = np.empty(three.shape, dtype=object)
    two[0,0,0] = np.array([[2,2]])
    two[0,1,0] = np.array([[3,3]])
    

    Then:

    sio.savemat('two.mat', {'two': two})
    

    to see what they look like:

    >>> two
    array([[[array([[2, 2]])],
            [array([[3, 3]])]]], dtype=object)
    
    >>> two.shape
    (1, 2, 1)
    

    Note that I may have gotten confused about your desired shape, since you have so many nested brackets, so you might have to reshape some of this, but the idea should hold regardless.

    0 讨论(0)
提交回复
热议问题