Hướng dẫn from 2d to 3d array python - từ mảng 2d sang mảng 3d

import numpy as np

# create a 2D array
a = np.array([[1,2,3], [4,5,6], [1,2,3], [4,5,6],[1,2,3], [4,5,6],[1,2,3], [4,5,6]])

print(a.shape) 
# shape of a = (8,3)

b = np.reshape(a, (8, 3, -1)) 
# changing the shape, -1 means any number which is suitable

print(b.shape) 
# size of b = (8,3,1)

Show


Định hình lại mảng

Định hình lại có nghĩa là thay đổi hình dạng của một mảng.

Hình dạng của một mảng là số lượng các phần tử trong mỗi chiều.

Bằng cách định hình lại, chúng ta có thể thêm hoặc loại bỏ kích thước hoặc thay đổi số lượng phần tử trong mỗi chiều.


Định hình lại từ 1-D đến 2-D

Thí dụ

Chuyển đổi mảng 1-D sau với 12 phần tử thành mảng 2-D.

Kích thước ngoài cùng sẽ có 4 mảng, mỗi mảng có 3 yếu tố:

nhập khẩu NUMPY dưới dạng NP

mảng = np.array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]))

newarr = mảng.reshape (4, 3)

print(newarr)

Hãy tự mình thử »


Định hình lại từ 1-D đến 3-D

Thí dụ

Chuyển đổi mảng 1-D sau với 12 phần tử thành mảng 2-D.

Kích thước ngoài cùng sẽ có 4 mảng, mỗi mảng có 3 yếu tố:

nhập khẩu NUMPY dưới dạng NP

mảng = np.array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]))

newarr = mảng.reshape (2, 3, 2)

print(newarr)

Hãy tự mình thử »



Chúng ta có thể định hình lại thành bất kỳ hình dạng nào không?

Có, miễn là các yếu tố cần thiết để định hình lại bằng cả hai hình dạng.

Chúng ta có thể định hình lại một mảng 8 phần tử 1D thành 4 phần tử trong 2 hàng 2D nhưng chúng ta không thể định hình lại nó thành một mảng 2 phần 3 của 3 phần tử vì điều đó yêu cầu 3x3 = 9 phần tử.

Thí dụ

Hãy thử chuyển đổi mảng 1D với 8 phần tử thành mảng 2D với 3 phần tử trong mỗi chiều (sẽ gây ra lỗi):

nhập khẩu NUMPY dưới dạng NP

mảng = np.array ([1, 2, 3, 4, 5, 6, 7, 8]))

newarr = mảng.reshape (3, 3)

print(newarr)

Hãy tự mình thử »


Chúng ta có thể định hình lại thành bất kỳ hình dạng nào không?

Thí dụ

Hãy thử chuyển đổi mảng 1D với 8 phần tử thành mảng 2D với 3 phần tử trong mỗi chiều (sẽ gây ra lỗi):

nhập khẩu NUMPY dưới dạng NP

mảng = np.array ([1, 2, 3, 4, 5, 6, 7, 8]))

newarr = mảng.reshape (3, 3)

Hãy tự mình thử »

Trả về bản sao hoặc xem?


Kiểm tra xem mảng được trả về là một bản sao hoặc chế độ xem:

in (Arr.Reshape (2, 4) .base)

Ví dụ trên trả về mảng ban đầu, vì vậy nó là một chế độ xem.

Chiều không xác định

Bạn được phép có một chiều "không xác định".

Nghĩa là bạn không phải chỉ định một số chính xác cho một trong các kích thước trong phương pháp định hình lại.

nhập khẩu NUMPY dưới dạng NP

mảng = np.array ([1, 2, 3, 4, 5, 6, 7, 8]))

newarr = mảng.reshape (3, 3)

print(newarr)

Hãy tự mình thử »

Trả về bản sao hoặc xem? We can not pass

import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
0 to more than one dimension.


Kiểm tra xem mảng được trả về là một bản sao hoặc chế độ xem:

in (Arr.Reshape (2, 4) .base)

Ví dụ trên trả về mảng ban đầu, vì vậy nó là một chế độ xem.

Thí dụ

Hãy thử chuyển đổi mảng 1D với 8 phần tử thành mảng 2D với 3 phần tử trong mỗi chiều (sẽ gây ra lỗi):

nhập khẩu NUMPY dưới dạng NP

mảng = np.array ([1, 2, 3, 4, 5, 6, 7, 8]))

newarr = mảng.reshape (3, 3)

print(newarr)

Hãy tự mình thử »

Trả về bản sao hoặc xem? There are a lot of functions for changing the shapes of arrays in numpy

import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
3,
import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
4 and also for rearranging the elements
import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
5,
import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
6,
import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
7,
import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
8 etc. These fall under Intermediate to Advanced section of numpy.


Kiểm tra xem mảng được trả về là một bản sao hoặc chế độ xem:

Exercise:

in (Arr.Reshape (2, 4) .base)

Ví dụ trên trả về mảng ban đầu, vì vậy nó là một chế độ xem.

Chiều không xác định


Cheatsheet và hướng dẫn cho việc định hình lại và ngăn xếp Numpy

Định hình lại các mảng numpy trong Python-một hướng dẫn bằng hình ảnh từng bước

Hình dung cách Numpy định hình lại các mảng đa chiều

Cheatsheet cho Python Numpy Reshape, Stack và Flatten (được tạo bởi Hause Lin và có sẵn ở đây)

Làm thế nào để

import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
9method định hình lại mảng? Bạn đã bị bối rối hoặc bạn đã đấu tranh để hiểu cách nó hoạt động? Hướng dẫn này sẽ hướng dẫn bạn định hình lại trong Numpy. Nếu bạn muốn một bản sao pdf của cheatsheet ở trên, bạn có thể tải xuống tại đây.

Bạn cũng có thể thích hướng dẫn của tôi về việc định hình lại các bản dữ liệu gấu trúc:

Tạo ra một mảng python numpy

Sử dụng

a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
0 để tạo ra một mảng numpy chứa một chuỗi các số từ 1 đến 12. Xem tài liệu ở đây.

________ 2np.Arange () tạo ra một loạt các số

Định hình lại bằng phương pháp định hình lại ()

Sử dụng phương thức

import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
9 để định hình lại mảng A1 của chúng tôi thành một mảng 3 chiều. Hãy để sử dụng 3_4 để chỉ kích thước của nó: 3 là kích thước 0 (trục) và 4 là kích thước thứ 1 (trục) (lưu ý rằng việc lập chỉ mục Python bắt đầu ở 0). Xem tài liệu ở đây.3_4 to refer to it dimensions: 3 is the 0th dimension (axis) and 4 is the 1st dimension (axis) (note that Python indexing begins at 0). See documentation here.

a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
3 bằng 4 mảng numpy

Nếu bạn muốn Numpy tự động xác định kích thước/chiều dài mà một kích thước cụ thể nên là, chỉ định kích thước là -1 cho kích thước đó.

a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)

Định hình lại dọc theo các kích thước khác nhau

Theo mặc định,

import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
9 định hình lại mảng dọc theo kích thước 0 (hàng). Hành vi này có thể được thay đổi thông qua tham số
a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
3 (giá trị mặc định là
a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
4). Xem tài liệu để biết thêm thông tin.along the 0th dimension (row). This behavior can be changed via the
a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
3 parameter (default value is
a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
4). See documentation for more information.

a1.reshape(3, 4) # reshapes or ‘fills in’ row by row
a1.reshape(3, 4, order='C') # same results as above

Chúng ta có thể định hình lại dọc theo chiều thứ 1 (cột) bằng cách thay đổi

a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
3 thành
a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
6. Đối với những người quen thuộc với Matlab, Matlab sử dụng thứ tự này.reshape along the 1st dimension (column) by changing
a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
3 to
a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
6. For those familiar with MATLAB, MATLAB uses this order.

a1.reshape(3, 4, order='F')  # reshapes column by column
> [[ 1 4 7 10]
[ 2 5 8 11]
[ 3 6 9 12]]
3 bằng 4 mảng numpy

Kiểm tra: Cái gì mà kích thước/hình dạng của Array A1?: What’s the dimension/shape of array a1?

A1 là một mảng 1D - nó chỉ có 1 chiều, mặc dù bạn có thể nghĩ rằng kích thước của nó phải là 1_12 (1 hàng bằng 12 cột). Để chuyển đổi thành mảng 1_12, hãy sử dụng

import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
9.1_12 (1 row by 12 columns). To convert to a 1_12 array, use
import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
9.

print(a1)  # what's the shape?
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
print(a1.shape)
> (12,)
a1_1_by_12 = a1.reshape(1, -1) # reshape to 1_12print(a1_1_by_12) # note the double square brackets!
> [[ 1 2 3 4 5 6 7 8 9 10 11 12]]
print(a1_1_by_12.shape) # 1_12 array
> (1, 12)

Flatten/Ravel đến mảng 1D với Ravel ()

Phương thức

a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
8 cho phép bạn chuyển đổi các mảng đa chiều thành mảng 1D (xem tài liệu tại đây). Mảng 2D của chúng tôi (3_4) của chúng tôi sẽ được làm phẳng hoặc bị xáo trộn sao cho chúng trở thành một mảng 1D với 12 phần tử.3_4) will be flattened or raveled such that they become a 1D array with 12 elements.

Nếu bạn không chỉ định bất kỳ tham số nào,

a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
8 sẽ làm phẳng/ravel mảng 2D của chúng tôi dọc theo các hàng (chiều thứ 0/trục). Nghĩa là, hàng 0 [1, 2, 3, 4] + hàng 1 [5, 6, 7, 8] + hàng 2 [9, 10, 11, 12].

Nếu bạn muốn làm phẳng/ravel dọc theo các cột (chiều thứ 1), hãy sử dụng tham số

a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
3.

print(a1_2d)  # 3_4
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
print(a1_2d.ravel()) # ravel by row (default order='C')
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
print(a1_2d.ravel(order='F')) # ravel by column
> [ 1 5 9 2 6 10 3 7 11 4 8 12]

Concatenate/stack mảng với a1.reshape(3, 4)a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)a1.reshape(3, 4)a1.reshape(3, -1) # same as above: a1.reshape(3, 4)a1.reshape(2, 6)a1.reshape(2, -1) # same as above: a1.reshape(2, 6)1 và a1.reshape(3, 4)a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)a1.reshape(3, 4)a1.reshape(3, -1) # same as above: a1.reshape(3, 4)a1.reshape(2, 6)a1.reshape(2, -1) # same as above: a1.reshape(2, 6)2

Xếp các mảng numpy

Tạo hai mảng 1D

a1 = np.arange(1, 13)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
a2 = np.arange(13, 25)
print(a2)
> [13 14 15 16 17 18 19 20 21 22 23 24]

Sử dụng các mảng

a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
1to Concatenate/Stack. Theo mặc định,
a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
1 Các mảng ngăn xếp dọc theo chiều thứ 0 (hàng) (tham số
a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
5). Xem tài liệu để biết thêm thông tin.

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
0

Xếp chồng dọc theo chiều thứ 1 (

a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
6)

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
1

Concatenate dưới dạng mảng 1D dài với

a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
2 (ngăn xếp theo chiều ngang)

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
2

Tạo mảng đa chiều (3D)

Mảng đa chiều là rất phổ biến và được gọi là tenxơ. Họ đã sử dụng rất nhiều trong các mạng lưới học tập sâu và thần kinh. Nếu bạn học sâu, bạn sẽ định hình lại các tenxơ hoặc mảng đa chiều thường xuyên.

Hãy bắt đầu bằng cách tạo ra hai mảng 3 x 4 khác nhau. Chúng tôi sẽ kết hợp chúng để tạo thành một mảng 3D sau đó.

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
3Two 3 by 4 mảng numpy

Tạo một mảng 3D bằng cách xếp các mảng dọc theo các trục/kích thước khác nhau

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
4 tạo ra các mảng numpy 3D từ các mảng 2d numpy

Hãy để in các mảng để xem chúng trông như thế nào. Xem hình trên để trực quan hóa.

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
5

Vì ba mảng 3D đã được tạo bằng cách xếp hai mảng dọc theo các kích thước khác nhau, nếu chúng tôi muốn truy xuất hai mảng gốc từ các mảng 3D này, chúng tôi sẽ phải tập hợp lại dọc theo kích thước/trục chính xác.

Kiểm tra: Làm thế nào chúng tôi có thể lấy mảng

a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
8 của chúng tôi từ các mảng 3D này?: How can we retrieve our
a1.reshape(3, 4)
a1.reshape(-1, 4) # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1) # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1) # same as above: a1.reshape(2, 6)
8 array from these 3D arrays?

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
6

Mảng đa chiều phẳng

Chúng ta cũng có thể làm phẳng các mảng đa chiều với

a1_2d = a1.reshape(3, 4)  # 3_4print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
8. Dưới đây, chúng tôi Ravel Row theo hàng (mặc định
a1.reshape(3, 4) # reshapes or ‘fills in’ row by row
a1.reshape(3, 4, order='C') # same results as above
0) đến mảng 1D.

Mảng phẳng với .ravel () ________ 17

Cột Ravel theo cột (

a1.reshape(3, 4) # reshapes or ‘fills in’ row by row
a1.reshape(3, 4, order='C') # same results as above
1) đến mảng 1D

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
8

Định hình lại mảng đa chiều

Chúng ta cũng có thể sử dụng

import numpy as npa1 = np.arange(1, 13)  # numbers 1 to 12print(a1.shape)
> (12,)
print(a1)
> [ 1 2 3 4 5 6 7 8 9 10 11 12]
9 để định hình lại các mảng đa chiều.

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)
9

Chú thích cuối

Tôi hy vọng bây giờ bạn có một sự hiểu biết tốt hơn về cách Numpy định hình lại các mảng đa chiều. Tôi mong chờ những suy nghĩ và bình luận của bạn. Ngoài ra, hãy xem phần giới thiệu trực quan này về Numpy và Biểu diễn dữ liệu.

Nếu bạn muốn một bản sao pdf của cheatsheet ở trên, bạn có thể tải xuống tại đây. Nếu bạn thấy bài đăng này hữu ích, hãy theo dõi tôi và truy cập trang web của tôi để biết thêm hướng dẫn khoa học dữ liệu.

Nếu bạn quan tâm đến việc cải thiện các kỹ năng khoa học dữ liệu của mình, các bài viết sau đây có thể hữu ích:

Để biết thêm bài viết, đăng ký vào danh sách gửi thư của tôi.