Hướng dẫn np.newaxis python - trăn np.newaxis

np.newaxis là gì

np.newaxis này chỉ là một bí danh cho hằng số không có của python, có nghĩa là bất cứ khi nào bạn sử dụng np.newaxis, bạn cũng có thể sử dụng không:

Nó chỉ mang tính mô tả nhiều hơn nếu bạn đọc mã sử dụng np.newaxis thay vì không sử dụng.

Bạn đang xem: Newaxis là gì

cách sử dụng np.newaxis?

np.newaxis thường được sử dụng với phần trang trí. cho biết rằng bạn muốn thêm một thứ nguyên bổ sung vào mảng. vị trí của np.newaxis thể hiện nơi tôi muốn thêm thứ nguyên.

Trong ví dụ đầu tiên, tôi đã sử dụng tất cả các phần tử của thứ nguyên đầu tiên và thêm thứ nguyên thứ hai:

Xem thêm: Phần mềm iobit malware fighter là gì

Ví dụ thứ hai thêm một thứ nguyên làm thứ nguyên đầu tiên và sau đó sử dụng tất cả các phần tử của thứ nguyên đầu tiên của mảng ban đầu làm phần tử của thứ nguyên thứ hai của mảng kết quả:

Tương tự, bạn có thể sử dụng nhiều np.newaxis để thêm nhiều thứ nguyên:

có lựa chọn thay thế cho np.newaxis không?

Có một hàm tương tự trong numpy: np.expand_dims, cũng có thể được sử dụng cho chèn một chiều:

nhưng vì bạn chỉ chèn 1 vào biểu mẫu, bạn cũng có thể thêm mảng định hình lại để thêm các thứ nguyên này:

Hầu hết thời gian, np.newaxis là cách dễ nhất để thêm thứ nguyên, nhưng bạn nên biết các lựa chọn thay thế.

Xem thêm: Thuật ngữ chạy bộ cơ bản cho người mới bắt đầu

trong một số ngữ cảnh, đó là một thứ nguyên bổ sung hữu ích:

  • nếu dữ liệu phải có kích thước cụ thể. ví dụ: nếu bạn muốn sử dụng matplotlib.pyplot.imshow để hiển thị mảng 1d.

    nếu bạn muốn numpy chuyển mảng. ví dụ: bằng cách thêm một thứ nguyên, bạn có thể nhận được sự khác biệt giữa tất cả các phần tử của một mảng: a – a [:, np.newaxis]. điều này hoạt động vì các hoạt động truyền trực tuyến không phức tạp bắt đầu với tham số cuối cùng là 1.

    để thêm kích thước cần thiết cho numpy để phát các mảng. điều này hoạt động vì mỗi độ dài 1 chiều chỉ đơn giản là được đúc thành độ dài của độ dài 1 chiều tương ứng của mảng khác.

    1 Nếu bạn muốn đọc thêm về các quy tắc phát trực tuyến, thì tài liệu về chủ đề đó rất tuyệt vời. cũng bao gồm một ví dụ với np.newaxis:

    Xem thêm: Phạt góc là gì? Khi nào được đá phạt góc?

P.S. Cũng xem câu trả lời tuyệt vời này: Newaxis vs định hình lại để thêm kích thướcincrease the dimension of the existing array by one more dimension, when used once. Thus,

  • Nói một cách đơn giản,

     x1 = np.array([1, 2, 3, 4, 5])
     x2 = np.array([5, 4, 3])
    
    1 được sử dụng để tăng kích thước của mảng hiện có thêm một chiều nữa, khi được sử dụng một lần. Như vậy, array will become 2D array

  • Mảng 1D sẽ trở thành mảng 2D array will become 3D array

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

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

và như thế..

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

Hướng dẫn np.newaxis python - trăn np.newaxis


Kịch bản-1:

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2 có 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 vectơ cột, như được mô tả trong hình trên.:
 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2 might come in handy when you want to explicitly convert a 1D array to either a row vector or a column vector, as depicted in the above picture.

Example:

# 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ụ trong khi thực hiện việc bổ sung một số mảng.: When we want to make use of numpy broadcasting as part of some operation, for instance while doing addition of some arrays.

Example:

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 giống như vậy, Numpy sẽ nâng cao

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
3 sau đây:

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

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2 để 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

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

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

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

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
5:: Observe that we get the same result in both cases (but one being the transpose of the other).


Lưu ý: Quan sát rằng chúng ta nhận được kết quả tương tự trong cả hai trường hợp (nhưng một là chuyển đổi của cái kia).: This is similar to scenario-1. But, you can use

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2 more than once to promote the array to higher dimensions. Such an operation is sometimes needed for higher order arrays (i.e. Tensors).

Example:

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)

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

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2 nhiều hơn một lần để quảng bá mảng đế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 bậc cao hơn (tức là các tenxơ).

# adding new axes at 1st, 4th, and last dimension of the resulting array
In [131]: newaxes = (0, 3, -1)
In [132]: arr_5D = np.expand_dims(arr, axis=newaxes)
In [133]: arr_5D.shape
Out[133]: (1, 5, 5, 1, 1)

Thay vào đó, bạn có thể sử dụng

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
7 có
 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
8 kwarg trực quan.

Thêm nền tảng về NP.Newaxis vs NP.Reshape

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
9 cũng được gọi là một chỉ số giả cho phép bổ sung tạm thời một trục vào một đa số.must for a
ValueError: operands could not be broadcast together with shapes (5,) (3,)
2 to happen).

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2 sử dụng toán tử cắt lát để tạo lại mảng trong khi
ValueError: operands could not be broadcast together with shapes (5,) (3,)
1 định hình lại mảng thành bố cục mong muốn (giả sử rằng kích thước phù hợp; và điều này phải xảy ra để
ValueError: operands could not be broadcast together with shapes (5,) (3,)
2 xảy ra).

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)

Thí dụ


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

ValueError: operands could not be broadcast together with shapes (5,) (3,)
3 (để sử dụng phát sóng). Một trục bị thiếu được lấp đầy ở đây bằng cách sử dụng
 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2 để làm cho hoạt động phát sóng hoạt động.
: You can also use
ValueError: operands could not be broadcast together with shapes (5,) (3,)
5 in place of
 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2; These are in fact the same objects.

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

Mẹo chung: Bạn cũng có thể sử dụng

ValueError: operands could not be broadcast together with shapes (5,) (3,)
5 thay cho
 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])
2; Đây thực sự là những đối tượng giống nhau.