Sederhananya, numpy.newaxis
digunakan untuk meningkatkan dimensi array yang ada dengan satu dimensi lagi , bila digunakan sekali . Jadi,
1D array akan menjadi array 2D
Array 2D akan menjadi array 3D
Array 3D akan menjadi array 4D
Array 4D akan menjadi array 5D
dan seterusnya..
Berikut ini adalah ilustrasi visual yang menggambarkan promosi array 1D ke array 2D.
Skenario-1 : np.newaxis
mungkin berguna ketika Anda ingin secara eksplisit mengubah array 1D menjadi vektor baris atau vektor kolom , seperti yang digambarkan dalam gambar di atas.
Contoh:
# 1D array
In [7]: arr = np.arange(4)
In [8]: arr.shape
Out[8]: (4,)
# make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :] # arr[None, :]
In [10]: row_vec.shape
Out[10]: (1, 4)
# make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis] # arr[:, None]
In [12]: col_vec.shape
Out[12]: (4, 1)
Skenario-2 : Ketika kita ingin menggunakan siaran numpy sebagai bagian dari beberapa operasi, misalnya saat melakukan penambahan beberapa array.
Contoh:
Katakanlah Anda ingin menambahkan dua array berikut:
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([5, 4, 3])
Jika Anda mencoba menambahkan ini begitu saja, NumPy akan meningkatkan yang berikut ValueError
:
ValueError: operands could not be broadcast together with shapes (5,) (3,)
Dalam situasi ini, Anda dapat menggunakan np.newaxis
untuk meningkatkan dimensi salah satu array sehingga NumPy dapat disiarkan .
In [2]: x1_new = x1[:, np.newaxis] # x1[:, None]
# now, the shape of x1_new is (5, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5]])
Sekarang, tambahkan:
In [3]: x1_new + x2
Out[3]:
array([[ 6, 5, 4],
[ 7, 6, 5],
[ 8, 7, 6],
[ 9, 8, 7],
[10, 9, 8]])
Atau, Anda juga dapat menambahkan sumbu baru ke array x2
:
In [6]: x2_new = x2[:, np.newaxis] # x2[:, None]
In [7]: x2_new # shape is (3, 1)
Out[7]:
array([[5],
[4],
[3]])
Sekarang, tambahkan:
In [8]: x1 + x2_new
Out[8]:
array([[ 6, 7, 8, 9, 10],
[ 5, 6, 7, 8, 9],
[ 4, 5, 6, 7, 8]])
Catatan : Amati bahwa kita mendapatkan hasil yang sama dalam kedua kasus (tetapi yang satu adalah transpose yang lain).
Skenario-3 : Ini mirip dengan skenario-1. Namun, Anda dapat menggunakan np.newaxis
lebih dari satu kali untuk mempromosikan array ke dimensi yang lebih tinggi. Operasi semacam itu kadang-kadang diperlukan untuk array orde tinggi ( yaitu Tensor ).
Contoh:
In [124]: arr = np.arange(5*5).reshape(5,5)
In [125]: arr.shape
Out[125]: (5, 5)
# promoting 2D array to a 5D array
In [126]: arr_5D = arr[np.newaxis, ..., np.newaxis, np.newaxis] # arr[None, ..., None, None]
In [127]: arr_5D.shape
Out[127]: (1, 5, 5, 1, 1)
Lebih banyak latar belakang di np.newaxis vs np.reshape
newaxis
juga disebut sebagai pseudo-index yang memungkinkan penambahan sementara sumbu ke multiarray.
np.newaxis
menggunakan operator slicing untuk membuat ulang array sementara np.reshape
membentuk kembali array ke tata letak yang diinginkan (dengan asumsi bahwa dimensi cocok; Dan ini harus dilakukan reshape
agar terjadi).
Contoh
In [13]: A = np.ones((3,4,5,6))
In [14]: B = np.ones((4,6))
In [15]: (A + B[:, np.newaxis, :]).shape # B[:, None, :]
Out[15]: (3, 4, 5, 6)
Dalam contoh di atas, kami memasukkan sumbu sementara antara sumbu pertama dan kedua B
(untuk menggunakan siaran). Sumbu yang hilang diisi di sini menggunakan np.newaxis
untuk membuat operasi penyiaran berfungsi.
Kiat Umum : Anda juga dapat menggunakanNone
di tempatnp.newaxis
; Ini sebenarnya benda yang sama .
In [13]: np.newaxis is None
Out[13]: True
PS Juga lihat jawaban yang bagus ini: newaxis vs membentuk kembali untuk menambah dimensi
except that it changes a row vector to a column vector?
Contoh pertama bukan vektor baris. Itu konsep matlab. Dalam python itu hanya vektor 1 dimensi tanpa konsep baris atau kolom. Vektor baris atau kolom adalah 2-dimensonal, seperti contoh kedua