Hướng dẫn dùng 1d shapes python

Nói một cách đơn giản, cái newaxisđược sử dụng để tăng kích thước của mảng hiện có thêm một chiều , khi được sử dụng một lần . Như vậy

  • Mảng 1D sẽ trở thành mảng 2D

  • Mảng 2D sẽ trở thành mảng 3D

  • Mảng 3D sẽ trở thành mảng 4D

  • Mảng 4D sẽ trở thành mảng 5D

và v.v.

Dưới đây là một minh họa trực quan mô tả việc quảng cáo mảng 1D sang mảng 2D.

Kịch bản-1 : np.newaxiscó thể có ích khi bạn muốn chuyển đổi rõ ràng một mảng 1D thành một vectơ hàng hoặc một vectơ cột , như được mô tả trong hình trên.

Thí dụ:

# 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]

Kịch bản-2 : Khi chúng tôi muốn sử dụng phát sóng numpy như một phần của một số hoạt động, ví dụ như trong khi thực hiện thêm một số mảng.

Thí dụ:

Giả sử bạn muốn thêm hai mảng sau:

 x1 = np.array[[1, 2, 3, 4, 5]]
 x2 = np.array[[5, 4, 3]]

Nếu bạn cố gắng thêm những thứ này như thế, NumPy sẽ nêu ra những điều sau ValueError:

ValueError: operands could not be broadcast together with shapes [5,] [3,]

Trong tình huống này, bạn có thể sử dụng np.newaxisđể tăng kích thước của một trong các mảng để NumPy có thể phát .

In [2]: x1_new = x1[:, np.newaxis]    # x1[:, None]
# now, the shape of x1_new is [5, 1]
# array[[[1],
#        [2],
#        [3],
#        [4],
#        [5]]]

Bây giờ, thêm:

In [3]: x1_new + x2
Out[3]:
array[[[ 6,  5,  4],
       [ 7,  6,  5],
       [ 8,  7,  6],
       [ 9,  8,  7],
       [10,  9,  8]]]

Ngoài ra, bạn cũng có thể thêm trục mới vào mảng x2:

In [6]: x2_new = x2[:, np.newaxis]    # x2[:, None]
In [7]: x2_new     # shape is [3, 1]
Out[7]: 
array[[[5],
       [4],
       [3]]]

Bây giờ, thêm:

In [8]: x1 + x2_new
Out[8]: 
array[[[ 6,  7,  8,  9, 10],
       [ 5,  6,  7,  8,  9],
       [ 4,  5,  6,  7,  8]]]

Lưu ý : Quan sát rằng chúng tôi nhận được cùng một kết quả trong cả hai trường hợp [nhưng một trường hợp là chuyển vị của trường hợp khác].

Kịch bản-3 : Điều này tương tự như kịch bản-1. Nhưng, bạn có thể sử dụng np.newaxisnhiều lần để quảng bá mảng lên kích thước cao hơn. Một hoạt động như vậy đôi khi là cần thiết cho các mảng thứ tự cao hơn [ ví dụ như Tenors ].

Thí dụ:

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]

Thêm nền tảng về np.newaxis vs np.reshape

newaxis cũng được gọi là chỉ số giả cho phép bổ sung tạm thời một trục vào đa khung.

np.newaxissử dụng toán tử cắt để tái tạo mảng trong khi np.reshapereshapes mảng để bố trí mong muốn [giả định rằng kích thước phù hợp; Và đây là bắt buộc đối với một reshapexảy ra].

Thí dụ

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]

Trong ví dụ trên, chúng tôi đã chèn một trục tạm thời giữa trục thứ nhất và trục thứ hai của B[để sử dụng phát sóng]. Một trục bị thiếu được điền vào đây bằng cách sử dụng np.newaxisđể làm cho hoạt động phát sóng hoạt động.

Mẹo chung : Bạn cũng có thể sử dụngNonethay chonp.newaxis; Đây là những đối tượng trong thực tế.

In [13]: np.newaxis is None
Out[13]: True

PS Cũng xem câu trả lời tuyệt vời này: newaxis vs reshape để thêm kích thước

217 hữu ích 2 bình luận chia sẻ

Chủ Đề