Você precisa de um curso de reciclagem de fatias de matriz numpy ndarray. Também conhecida como indexação de matriz multidimensional, consulte: docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html A matriz divide seu ndarray usando colchetes e use o delimitador de vírgula para separar quanto de cada dimensão que você deseja. Será algo como (não exatamente) o seguinte: your_array[50:100, 7, :]que nivela o objeto 3d para 2d, usando apenas a fatia número 7 para a 2ª dimensão.
>>> arr = numpy.zeros((50,100,25))>>> arr.shape
# (50, 100, 25)>>> new_arr = arr.reshape(5000,25)>>> new_arr.shape
# (5000, 25)# One shape dimension can be -1. # In this case, the value is inferred from # the length of the array and remaining dimensions.>>> another_arr = arr.reshape(-1, arr.shape[-1])>>> another_arr.shape
# (5000, 25)
Uma leve generalização na resposta de Alexander - np.reshape pode assumir -1 como argumento, significando "tamanho total da matriz dividido pelo produto de todas as outras dimensões listadas":
por exemplo, para nivelar tudo, exceto a última dimensão:
Uma leve generalização na resposta de Peter - você pode especificar um intervalo acima da forma da matriz original se quiser ir além das matrizes tridimensionais.
por exemplo, para nivelar todas, exceto as duas últimas dimensões:
your_array[50:100, 7, :]
que nivela o objeto 3d para 2d, usando apenas a fatia número 7 para a 2ª dimensão.Respostas:
Dê uma olhada no numpy.reshape .
fonte
Uma leve generalização na resposta de Alexander - np.reshape pode assumir -1 como argumento, significando "tamanho total da matriz dividido pelo produto de todas as outras dimensões listadas":
por exemplo, para nivelar tudo, exceto a última dimensão:
fonte
Uma leve generalização na resposta de Peter - você pode especificar um intervalo acima da forma da matriz original se quiser ir além das matrizes tridimensionais.
por exemplo, para nivelar todas, exceto as duas últimas dimensões:
EDIT: Uma ligeira generalização para a minha resposta anterior - é claro, você também pode especificar um intervalo no início da remodelação:
fonte
Uma abordagem alternativa é usar
numpy.resize()
como em:fonte