Kryterium, które należy spełnić, aby nadać nowy kształt, jest to, że „nowy kształt powinien być zgodny z oryginalnym kształtem”
numpy pozwala nam podać jeden z nowych parametrów kształtu jako -1 (np .: (2, -1) lub (-1,3), ale nie (-1, -1)). Oznacza to po prostu, że jest to nieznany wymiar i chcemy, aby numpy go zrozumiał. I numpy to zrozumie, patrząc na „długość tablicy i pozostałe wymiary” i upewniając się, że spełnia wyżej wymienione kryteria
Teraz zobacz przykład.
z = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
z.shape
(3, 4)
Teraz próbuje przekształcić za pomocą (-1). Wynik nowego kształtu to (12) i jest zgodny z oryginalnym kształtem (3,4)
z.reshape(-1)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
Teraz próbuję zmienić kształt za pomocą (-1, 1). Podaliśmy kolumnę jako 1, ale wiersze jako nieznane. Otrzymujemy więc nowy kształt jako (12, 1). Ponownie zgodny z oryginalnym kształtem (3,4)
z.reshape(-1,1)
array([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12]])
Powyższe jest zgodne z komunikatem numpy
porady / błędu, który można wykorzystać reshape(-1,1)
w przypadku jednej funkcji; tj. pojedyncza kolumna
Przekształć dane, używając, array.reshape(-1, 1)
jeśli dane mają jedną funkcję
Nowy kształt jako (-1, 2). wiersz nieznany, kolumna 2. otrzymujemy wynik nowy kształt jako (6, 2)
z.reshape(-1, 2)
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])
Teraz próbuję zachować kolumnę jako nieznaną. Nowy kształt jako (1, -1). tzn. wiersz to 1, kolumna nieznana. otrzymujemy nowy kształt jako (1, 12)
z.reshape(1,-1)
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]])
Powyższe jest zgodne z komunikatem numpy
porady / błędu, który należy zastosować reshape(1,-1)
dla pojedynczej próbki; tj. pojedynczy rząd
Przekształć dane, używając, array.reshape(1, -1)
jeśli zawiera pojedynczą próbkę
Nowy kształt (2, -1). Wiersz 2, kolumna nieznana. otrzymujemy nowy kształt jako (2,6)
z.reshape(2, -1)
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
Nowy kształt jako (3, -1). Wiersz 3, kolumna nieznana. otrzymujemy nowy kształt jako (3,4)
z.reshape(3, -1)
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
I na koniec, jeśli spróbujemy podać oba wymiary jako nieznane, tj. Nowy kształt jako (-1, -1). Wyrzuci błąd
z.reshape(-1, -1)
ValueError: can only specify one unknown dimension
reshape
tak, aby zachować tę samą liczbę elementów.