Jak spłaszczyć tylko niektóre wymiary tablicy numpy

Czy istnieje szybki sposób na "spłaszczenie" lub spłaszczenie tylko niektórych pierwszych wymiarów w tablicy numpy?

Na przykład, biorąc pod uwagę tablicę numpy wymiarów (50,100,25), wynikowymi wymiarami będą (5000,25)

Author: Eric Leschinski, 2013-09-12

3 answers

Spójrz na numpy.zmień kształt .

>>> 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)
 75
Author: Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-04 10:52:54

Lekkie uogólnienie odpowiedzi Aleksandra-np.reshape może przyjmować -1 jako argument, co oznacza "całkowity rozmiar tablicy podzielony przez iloczyn wszystkich innych podanych wymiarów":

Np. spłaszczyć wszystkie poza ostatnim wymiarem:

>>> arr = numpy.zeros((50,100,25))
>>> new_arr = arr.reshape(-1, arr.shape[-1])
>>> new_arr.shape
# (5000, 25)
 62
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 18:14:30

Lekkie uogólnienie do odpowiedzi Petera -- możesz określić zakres nad oryginalnym kształtem tablicy, jeśli chcesz wyjść poza tablice trójwymiarowe.

Np. aby spłaszczyć wszystkie poza ostatnim dwa Wymiary:

arr = numpy.zeros((3, 4, 5, 6))
new_arr = arr.reshape(-1, *arr.shape[-2:])
new_arr.shape
# (12, 5, 6)

EDIT: lekkie uogólnienie do mojej wcześniejszej odpowiedzi -- można oczywiście również podać zakres na początku przeformułowania:

arr = numpy.zeros((3, 4, 5, 6, 7, 8))
new_arr = arr.reshape(*arr.shape[:2], -1, *arr.shape[-2:])
new_arr.shape
# (3, 4, 30, 7, 8)
 12
Author: KeithWM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 12:31:22