Matlab vs Python: remodelar

Así que encontré esto :

Al convertir el código de MATLAB, puede ser necesario cambiar la forma de una matriz a una secuencia lineal, realizar algunas operaciones de indexación y luego volver a configurarla. Como remodelar (normalmente) produce vistas en el mismo almacenamiento, debería ser posible hacerlo de manera bastante eficiente.

Tenga en cuenta que el orden de escaneo utilizado por la remodelación en Numpy se establece por defecto en el orden ‘C’, mientras que MATLAB usa el orden Fortran. Si simplemente estás convirtiendo a una secuencia lineal y viceversa, esto no importa. Pero si está convirtiendo remodelaciones de código MATLAB que se basa en el orden de escaneo, entonces este código MATLAB:

z = reshape(x,3,4); 

debe convertirse

 z = x.reshape(3,4,order='F').copy() 

en numpy.

Tengo una matriz 16 * 2 multidimensional llamada mafs , cuando lo hago en MATLAB:

 mafs2 = reshape(mafs,[4,4,2]) 

Obtengo algo diferente que cuando en Python hago:

 mafs2 = reshape(mafs,(4,4,2)) 

o incluso

 mafs2 = mafs.reshape((4,4,2),order='F').copy() 

¿Alguna ayuda en esto? Gracias a todos.

Ejemplo:

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 

Pitón:

 >>> 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]])