Hướng dẫn how do you reshape 3d to 1d in python? - làm cách nào để bạn định hình lại 3d thành 1d trong python?

\ (\ newcommand {l} [1] {\ | #1 \ |} \ newcommand {vl} [1] {\ l {\ vec Re} \, (#1)} \ newCommand {i} [1] {\ operatorName {im} \, (#1)} \)

Đây là một mảng một chiều:

>>> import numpy as np
>>> arr_1d = np.arange(6)
>>> arr_1d
array([0, 1, 2, 3, 4, 5])
>>> arr_1d.shape
(6,)

Chúng ta có thể định hình lại mảng này thành hai chiều bằng phương pháp

>>> arr_2d = arr_1d.reshape((2, 3))
>>> arr_2d
array([[0, 1, 2],
       [3, 4, 5]])
2 của mảng:

>>> arr_2d = arr_1d.reshape((2, 3))
>>> arr_2d
array([[0, 1, 2],
       [3, 4, 5]])

Lưu ý cách Numpy sử dụng các phần tử mảng 1D. Nó lấy mỗi phần tử từ mảng 1D và lấp đầy các hàng trước, sau đó là các cột.

Chúng ta có thể định hình lại trở lại một chiều.

>>> arr_2d.reshape((6,))
array([0, 1, 2, 3, 4, 5])

Ở đây, Numpy tìm nạp dữ liệu từ các hàng trước và các cột, để điền vào các phần tử của mảng 1D.

Giá trị

>>> arr_2d = arr_1d.reshape((2, 3))
>>> arr_2d
array([[0, 1, 2],
       [3, 4, 5]])
3 là đặc biệt cho phương pháp
>>> arr_2d = arr_1d.reshape((2, 3))
>>> arr_2d
array([[0, 1, 2],
       [3, 4, 5]])
2. Điều đó có nghĩa là, tạo ra một kích thước theo kích thước sẽ sử dụng các yếu tố không xác định còn lại. Chúng tôi sẽ thấy những gì mà không xác định được có nghĩa là sớm. Hiện tại, không được xác định là đúng với tất cả các yếu tố, vì vậy hình dạng giống như số lượng các phần tử trong mảng 2D:

>>> arr_2d.reshape(-1)
array([0, 1, 2, 3, 4, 5])

Nó rất phổ biến để chuyển đổi một mảng 2 hoặc 3 hoặc n thành mảng 1D, do đó có một lệnh cắt ngắn cho điều đó:

>>> arr_2d.ravel()
array([0, 1, 2, 3, 4, 5])

Bạn có thể định hình lại từ một hình dạng, sang bất kỳ hình dạng nào khác, miễn là số lượng phần tử vẫn giữ nguyên. Bạn có thể thấy thuật toán Numpy đang sử dụng để quyết định các yếu tố nào đi vào vị trí của mảng không?

>>> arr_2d.reshape((3, 2))
array([[0, 1],
       [2, 3],
       [4, 5]])

RShape sử dụng -1 làm giá trị có nghĩa là giá trị hình dạng sẽ sử dụng các phần tử không xác định còn lại. Ví dụ: chúng tôi có thể chỉ định rằng chúng tôi muốn kích thước đầu tiên là chiều dài 3 và Numpy có thể tìm ra chiều thứ hai phải là chiều dài 2 và cách khác:

>>> arr_1d.reshape((3, -1))
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> arr_1d.reshape((-1, 2))
array([[0, 1],
       [2, 3],
       [4, 5]])

Numpy sử dụng cùng một thuật toán để định hình lại một mảng ba chiều:

>>> arr_1d_bigger = np.arange(24)
>>> arr_1d_bigger
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])
>>> arr_1d_bigger.shape
(24,)
>>> arr_3d = arr_1d_bigger.reshape((2, 3, 4))
>>> arr_3d
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

Ở đây Numpy đang cho chúng ta thấy hai lát trong chiều đầu tiên:

>>> arr_3d[0, :, :]
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> arr_3d[1, :, :]
array([[12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

Để suy nghĩ về mảng này là gì, hãy tưởng tượng phần dưới cùng của mỗi mảng 2D về phía bạn từ mặt phẳng của màn hình và nhìn vào những chiếc máy bay nghiêng này từ bên trái, vì vậy 0 nằm gần trên 12, trong mặt phẳng của mặt phẳng của Màn hình và 4 nằm gần trên 16, một chút về phía trước của mặt phẳng màn hình.

Dưới đây là bốn máy bay trên mạng của mảng (các lát trên chiều thứ ba):

>>> for i in range(4):
...     print(arr_3d[:, :, i])
...
[[ 0  4  8]
 [12 16 20]]
[[ 1  5  9]
 [13 17 21]]
[[ 2  6 10]
 [14 18 22]]
[[ 3  7 11]
 [15 19 23]]

Chúng ta có thể định hình lại một chiều theo cách tương tự như chúng ta đã làm cho các mảng 2D.

>>> arr_2d = arr_1d.reshape((2, 3))
>>> arr_2d
array([[0, 1, 2],
       [3, 4, 5]])
0

Để có được các phần tử của mảng 1D, Numpy đầu tiên tìm nạp các giá trị trên trục cuối cùng (trục sâu hoặc trục mặt phẳng), sau đó là trục thứ hai đến cuối (cột), sau đó là trục (hàng) thứ nhất.

Khi định hình lại thành ba chiều, Numpy điền vào phần cuối, sau đó thứ hai, sau đó kích thước đầu tiên:

>>> arr_2d = arr_1d.reshape((2, 3))
>>> arr_2d
array([[0, 1, 2],
       [3, 4, 5]])
1