Trong bài đăng này, tôi sẽ đề cập đến các cách thao tác với hình dạng của một mảng trong NumPy bằng các thao tác sau
- định hình lại
- Expand_dims
- Ravel và Flatten
Nếu bạn muốn đọc về những điều cơ bản của NumPy, bạn có thể truy cập bài đăng sau
Công cụ bị đánh giá thấp nhất trong Khoa học dữ liệu. NumPy
Sức mạnh của NumPy và cách sử dụng hiệu quả
hướng tới khoa học dữ liệu. com
Hãy bắt đầu với việc nhập NumPy
import numpy as np
định hình lạiMẹo. Mảng NumPy hiệu quả hơn nhiều so với danh sách về mặt lưu trữ và xử lý
Numpy cung cấp các công cụ linh hoạt để thay đổi kích thước của mảng. Trước khi thay đổi kích thước, tốt hơn hết bạn nên nhớ kích thước của một mảng có nghĩa là gì và các mảng có kích thước khác nhau trông như thế nào
a = np.random.randint[10, size=5]
a
array[[9, 7, 3, 7, 5]]a.ndim
1a.shape
[5,0]
Chúng ta cũng có thể tạo các mảng nhiều chiều với numpy
# 2-dimensional
b = np.zeros[[3,4]]b
array[[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]]b.ndim
2# 3-dimensional
c = np.ones[[2,2,2]]c
array[[[[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.]]]]c.ndim
3
Có nhiều cách khác nhau để thay đổi kích thước của một mảng. Hàm định hình lại thường được sử dụng để sửa đổi hình dạng và do đó kích thước của một mảng. Chúng ta chỉ cần chuyển hình dạng mới làm đối số để định hình lại chức năng
Mẹo. Tôi sử dụng các cách khác nhau khi tạo mảng cho các ví dụ để bạn cũng sẽ làm quen với việc tạo mảng
np.arange[6]
array[[0, 1, 2, 3, 4, 5]]np.arange[6].reshape[2,3]
array[[[0, 1, 2],
[3, 4, 5]]]
Định hình lại [2,3] trả về một mảng mới có 2 hàng và 3 cột là 2 chiều. Vậy mảng mà chúng ta áp dụng reshape[2,3] phải có 6 phần tử
Hãy cũng tạo một mảng 3 chiều bằng cách sử dụng định hình lại
np.arange[8].reshape[2,2,2]array[[[[0, 1],
[2, 3]], [[4, 5],
[6, 7]]]]
Một tính năng rất hữu ích của hàm định hình lại là nếu bạn không biết số lượng phần tử trong mảng ban đầu, bạn có thể chỉ định một trong các kích thước là “-1”
Vì hầu như chúng ta luôn làm việc với các mảng rất lớn, nên cũng thuận tiện khi gõ [-1,1] thay vì [100000,1]
Mẹo. Khi định hình lại mảng, hình dạng mới cần tương thích với hình dạng ban đầu
np.arange[6].reshape[-1,2]
array[[[0, 1],
[2, 3],
[4, 5]]]np.arange[6].reshape[-1,3]
array[[[0, 1, 2],
[3, 4, 5]]]
Cũng có thể tăng kích thước mà không thay đổi trình tự các phần tử. Chúng ta có thể đạt được nó bằng cách reshape[-1,1] hoặc [1,-1]
np.random.normal[0,1,3]Mở rộng_dims
array[[-0.14788456, 0.01909406, 0.88659889]]np.random.normal[0,1,3].reshape[-1,1]
array[[[-0.14588167],
[ 0.06871804],
[ 2.32699261]]]np.random.normal[0,1,3].reshape[1,-1]
array[[[ 1.46812451, 0.48818206, -0.80228877]]]
Như tên gợi ý, expand_dims mở rộng hình dạng của một mảng
a = np.array[[1,2,3]]np.expand_dims[a, axis=0]
array[[[1, 2, 3]]]np.expand_dims[a, axis=1]
array[[[1],
[2],
[3]]]
tham số trục cho phép chọn thông qua trục nào việc mở rộng được thực hiện
expand_dims với axis=1 tương đương với reshape[-1,1]
np.expand_dims[a, axis=1]Ravel và Flatten
array[[[1],
[2],
[3]]]np.expand_dims[a, axis=1]
array[[[1],
[2],
[3]]]
Ravel trả về một mảng phẳng. Nếu bạn đã quen thuộc với các mạng thần kinh tích chập [CNN], các bản đồ tính năng tổng hợp sẽ được làm phẳng trước khi cấp dữ liệu cho lớp được kết nối đầy đủ. Thao tác này đang chuyển đổi mảng 2-D thành mảng 1-D
a = np.random.randint[10, size=[2,3]]
aarray[[[6, 8, 2],
[5, 1, 8]]]np.ravel[a]
array[[6, 8, 2, 5, 1, 8]]
Hàng thứ hai được nối vào cuối hàng đầu tiên. Hàm Ravel cũng cho phép nối theo cột bằng cách sử dụng tham số thứ tự
a = np.random.randint[10, size=5]0
a
array[[9, 7, 3, 7, 5]]a.ndim
1a.shape
[5,0]
Flatten cũng thực hiện thao tác tương tự
a = np.random.randint[10, size=5]1
a
array[[9, 7, 3, 7, 5]]a.ndim
1a.shape
[5,0]
Sự khác biệt giữa ravel và làm phẳng
- Ravel. Trả về dạng xem của mảng ban đầu khi có thể
- làm phẳng. Luôn trả về một bản sao của mảng ban đầu
Do đó, những thay đổi bạn thực hiện trên mảng trả về bằng cách làm phẳng sẽ không bao giờ được thực hiện trên mảng ban đầu. Tuy nhiên, nếu bạn sửa đổi mảng trả về bởi ravel, bạn cũng có thể thay đổi mảng ban đầu. Hãy đi qua một ví dụ để làm cho nó rõ ràng