NumPy Array Reshaping
Přetváření polí
Změna tvaru znamená změnu tvaru pole.
Tvar pole je počet prvků v každé dimenzi.
Změnou tvaru můžeme přidat nebo odebrat rozměry nebo změnit počet prvků v každém rozměru.
Změna tvaru z 1-D na 2-D
Příklad
Převeďte následující 1D pole s 12 prvky na 2D pole.
Nejvzdálenější dimenze bude mít 4 pole, každé se 3 prvky:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12])
newarr = arr.reshape(4, 3)
print(newarr)
Změna tvaru z 1-D na 3-D
Příklad
Převeďte následující 1D pole s 12 prvky na 3D pole.
Nejvzdálenější dimenze bude mít 2 pole, která obsahují 3 pole, každé se 2 prvky:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12])
newarr = arr.reshape(2, 3, 2)
print(newarr)
Můžeme se přetvořit do jakéhokoli tvaru?
Ano, pokud jsou prvky potřebné pro přetváření v obou tvarech stejné.
Můžeme přetvořit 1D pole s 8 prvky na 4 prvky ve 2 řádcích 2D pole, ale nemůžeme je přetvořit na 3 prvky 3 řádky 2D pole, protože by to vyžadovalo 3x3 = 9 prvků.
Příklad
Zkuste převést 1D pole s 8 prvky na 2D pole se 3 prvky v každém rozměru (způsobí chybu):
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)
Vrátí Kopírovat nebo Zobrazit?
Příklad
Zkontrolujte, zda je vrácené pole kopií nebo pohledem:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base)
Výše uvedený příklad vrací původní pole, jedná se tedy o pohled.
Neznámý rozměr
Můžete mít jednu „neznámou“ dimenzi.
To znamená, že pro jednu z dimenzí v metodě změny tvaru nemusíte zadávat přesné číslo.
Předejte -1
jako hodnotu a NumPy toto číslo vypočítá za vás.
Příklad
Převeďte 1D pole s 8 prvky na 3D pole s 2x2 prvky:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)
Poznámka: Nemůžeme přejít -1
do více než jedné dimenze.
Zploštění polí
Zploštění pole znamená převod vícerozměrného pole na pole 1D.
Můžeme reshape(-1)
k tomu použít.
Příklad
Převeďte pole na 1D pole:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr
= arr.reshape(-1)
print(newarr)
Poznámka: Existuje mnoho funkcí pro změnu tvarů polí v numpy flatten
a ravel
také pro přeskupení prvků rot90
, flip
, fliplr
atd flipud
. Tyto funkce spadají do sekce Intermediate to Advanced numpy.