Matlab vs Python: Reshape

后端 未结 2 376
说谎
说谎 2020-12-30 00:58

So I found this:

When converting MATLAB code it might be necessary to first reshape a matrix to a linear sequence, perform some indexing operations

相关标签:
2条回答
  • 2020-12-30 01:38

    Example:

    MATLAB:

    >> mafs = [(1:16)' (17:32)']
    mafs =
         1    17
         2    18
         3    19
         4    20
         5    21
         6    22
         7    23
         8    24
         9    25
        10    26
        11    27
        12    28
        13    29
        14    30
        15    31
        16    32
    
    >> reshape(mafs,[4 4 2])
    ans(:,:,1) =
         1     5     9    13
         2     6    10    14
         3     7    11    15
         4     8    12    16
    ans(:,:,2) =
        17    21    25    29
        18    22    26    30
        19    23    27    31
        20    24    28    32
    

    Python:

    >>> import numpy as np
    >>> mafs = np.c_[np.arange(1,17), np.arange(17,33)]
    >>> mafs.shape
    (16, 2)
    >>> mafs[:,0]
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])
    >>> mafs[:,1]
    array([17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32])
    
    >>> r = np.reshape(mafs, (4,4,2), order="F")
    >>> r.shape
    (4, 4, 2)
    >>> r[:,:,0]
    array([[ 1,  5,  9, 13],
           [ 2,  6, 10, 14],
           [ 3,  7, 11, 15],
           [ 4,  8, 12, 16]])
    >>> r[:,:,1]
    array([[17, 21, 25, 29],
           [18, 22, 26, 30],
           [19, 23, 27, 31],
           [20, 24, 28, 32]])
    
    0 讨论(0)
  • 2020-12-30 01:48

    I was having a similar issue myself, as I am also trying to make the transition from MATLAB to Python. I was finally able to convert a numpy matrix, given in depth, row, col, format to a single sheet of column vectors (per image).

    In MATLAB I would have done something like:

    output = reshape(imStack,[row*col,depth])
    

    In Python this seems to translate to:

    import numpy as np
    output=np.transpose(imStack)
    output=output.reshape((row*col, depth), order='F')
    
    0 讨论(0)
提交回复
热议问题