Tại sao nhập NumPy được sử dụng trong Python?

Sau bài đăng blog cuối cùng của tôi về Pandas, tôi nghĩ có thể nên lùi lại một bước và viết một bài về thư viện NumPy. NumPy [viết tắt của Numerical Python] là “gói cơ bản cho tính toán khoa học với Python” và nó là thư viện Pandas, Matplotlib và Scikit-learning được xây dựng trên đầu trang. Bạn có thể nghĩ "việc sử dụng NumPy để làm gì khi tôi có thể sử dụng những thư viện này?"

Cài đặt và Bắt đầu

NumPy không đi kèm với Python theo mặc định nên nó cần được cài đặt. Như tôi đã đề xuất cho việc cài đặt Pandas, cách dễ nhất để tải NumPy [cùng với rất nhiều gói khác] là cài đặt Anaconda. Nếu Bạn không muốn cài đặt tất cả các gói này và chỉ cài đặt NumPy, bạn có thể tải xuống phiên bản dành cho hệ điều hành của mình từ trang này

Sau khi bạn đã tải xuống và cài đặt NumPy, bạn cần nhập nó mỗi khi bạn muốn sử dụng nó trong Python IDE [Môi trường phát triển tích hợp] như Jupyter Notebook hoặc Spyder [cả hai đều đi kèm với Anaconda theo mặc định]. Xin nhắc lại, nhập thư viện có nghĩa là tải thư viện đó vào bộ nhớ và sau đó thư viện sẽ ở đó để bạn làm việc với. Để nhập NumPy, bạn cần viết đoạn mã sau

import numpy as np

Và bạn đã sẵn sàng để đi. Thông thường bạn sẽ thêm phần thứ hai [‘as np’] để bạn có thể sử dụng NumPy bằng cách viết ‘np. lệnh' thay vì phải viết 'numpy. lệnh' mỗi khi bạn muốn sử dụng nó. Đó không phải là một sự khác biệt lớn nhưng này, mỗi lần gõ phím đều có giá trị. Hãy nhớ rằng, bạn sẽ cần phải làm điều đó mỗi khi khởi động một Jupyter Notebook mới, một tệp Spyder, v.v.

Làm việc với NumPy

Tạo mảng NumPy, tải và lưu tệp

NumPy hoạt động với các đối tượng Python được gọi là mảng đa chiều. Mảng về cơ bản là tập hợp các giá trị và chúng có một hoặc nhiều thứ nguyên. Cấu trúc dữ liệu mảng NumPy còn được gọi là ndarray, viết tắt của n- dimensions array. Mảng có một chiều được gọi là vectơ và mảng có hai chiều được gọi là ma trận. Các bộ dữ liệu thường được xây dựng dưới dạng ma trận và việc mở chúng bằng NumPy sẽ dễ dàng hơn nhiều thay vì làm việc với danh sách các danh sách chẳng hạn

Chuyển danh sách thành mảng NumPy khá đơn giản

numpy_array = np.array[list]

Và in/hiển thị mảng sẽ như thế này

array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]

Một tùy chọn khác là mở tệp CSV bằng lệnh np. hàm genfromtxt[]

numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]

Đối số bên trong dấu ngoặc là tên tệp [và đường dẫn, nếu cần], dấu phân cách được đặt thành ';' để đảm bảo nó được phân tích cú pháp chính xác — bạn có thể sử dụng các ký tự khác nhau để phân tích cú pháp [chẳng hạn như ',']; . Bạn có thể không bao gồm nó nếu bạn muốn các tiêu đề [vì mặc định là 0]

Bạn cũng có thể lưu mảng NumPy vào tệp bằng cách sử dụng np. savetxt[]. Ví dụ: np.savetxt['file.txt',arr,delimiter=' '] sẽ lưu vào tệp văn bản và np.savetxt['file.csv',arr,delimiter=','] sẽ lưu vào tệp CSV

Một tính năng thú vị khác là khả năng tạo các mảng khác nhau như mảng ngẫu nhiên. np.random.rand[3,4] sẽ tạo một mảng 3x4 gồm các số ngẫu nhiên từ 0 đến 1 trong khi np.random.rand[7,6]*100 sẽ tạo một mảng 7x6 gồm các số ngẫu nhiên từ 0 đến 100; . np.random.randint[10,size=[3,2]] tạo một mảng có kích thước 3x2 với các số ngẫu nhiên trong khoảng từ 0 đến 9. Hãy nhớ rằng chữ số cuối cùng [10] không được bao gồm trong phạm vi khi bạn sử dụng cú pháp này

Cũng có thể tạo một mảng gồm tất cả các số không. np.zeros[4,3] [mảng 4x3 gồm tất cả các số 0] hoặc 1_______0 [mảng 4x1 gồm các số 1]; . Tất nhiên, bạn có thể thay đổi từng con số này để có được mảng bạn muốn

Làm việc và kiểm tra mảng

Bây giờ bạn đã tải mảng của mình, bạn có thể kiểm tra kích thước của nó [số phần tử] bằng cách nhập

numpy_array = np.array[list]
2 và hình dạng của nó [kích thước - hàng và cột] bằng cách nhập
numpy_array = np.array[list]
3. Bạn có thể sử dụng
numpy_array = np.array[list]
4 để lấy các kiểu dữ liệu của mảng [số float, số nguyên, v.v. — xem thêm trong tài liệu NumPy] và nếu cần chuyển đổi kiểu dữ liệu, bạn có thể sử dụng lệnh
numpy_array = np.array[list]
5. Nếu bạn cần chuyển đổi một mảng NumPy thành danh sách Python, thì cũng có một lệnh cho việc đó.
numpy_array = np.array[list]
6

Lập chỉ mục và cắt lát

Lập chỉ mục và cắt mảng NumPy hoạt động rất giống với cách làm việc với danh sách Python.

numpy_array = np.array[list]
7 sẽ trả về phần tử trong chỉ mục thứ 5 và
numpy_array = np.array[list]
8 sẽ trả về phần tử trong chỉ mục[2][5]. Ví dụ, bạn cũng có thể chọn năm phần tử đầu tiên bằng cách sử dụng dấu hai chấm [. ].
numpy_array = np.array[list]
9 sẽ trả về năm phần tử đầu tiên [chỉ số 0–4] và
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
0 sẽ trả về năm phần tử đầu tiên trong cột 4. Bạn có thể dùng
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
1 để lấy các phần tử từ đầu cho đến chỉ số 2 [không tính chỉ số 2] hoặc
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
2 để trả về từ chỉ số thứ 2 cho đến hết mảng.
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
3 sẽ trả về các phần tử ở chỉ mục 1 trên tất cả các hàng

Một lần nữa, việc gán các giá trị cho một mảng NumPy rất giống với việc gán trong các danh sách Python.

array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
4 sẽ gán giá trị 4 cho phần tử trên chỉ số 1; .
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
5 hoặc sử dụng cắt khi gán giá trị.
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
6 sẽ thay đổi toàn bộ cột thứ 11 thành giá trị 10

Sắp xếp và định hình lại

array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
7 có thể được sử dụng để sắp xếp mảng NumPy của bạn — bạn có thể chuyển các đối số khác nhau bên trong dấu ngoặc để xác định thứ bạn muốn sắp xếp [ví dụ: bằng cách sử dụng đối số 'thứ tự=chuỗi/danh sách các chuỗi'. Xem thêm ví dụ trong].
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
8 sẽ sắp xếp trục cụ thể của mảng — hàng hoặc cột.
array[[[  7.4  ,   0.7  ,   0.   , ...,   0.56 ,   9.4  ,   5.   ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
9 sẽ làm phẳng mảng 2 chiều thành mảng 1 chiều.
numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
0 sẽ hoán vị một mảng — nghĩa là cột sẽ trở thành hàng và ngược lại.
numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
1 sẽ định hình lại mảng của bạn theo kích thước bạn đã đặt với x và y.
numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
2 sẽ thay đổi hình dạng mảng thành x và y và điền các giá trị mới bằng số không

Kết hợp và chia tách

Bạn có thể sử dụng

numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
3 để kết hợp hai mảng NumPy — thao tác này sẽ thêm mảng 2 dưới dạng hàng vào cuối mảng 1 trong khi
numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
4 sẽ thêm mảng 2 dưới dạng cột vào cuối mảng 1.
numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
5 sẽ chia mảng thành hai mảng con và
numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
6 sẽ chia mảng theo chiều ngang trên chỉ mục thứ 5

Thêm và xóa các phần tử

Tất nhiên, có các lệnh để thêm và xóa các phần tử khỏi mảng NumPy

  • numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
    7 sẽ nối các giá trị vào cuối mảng
  • numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
    8sẽ chèn các giá trị vào mảng trước chỉ mục 3
  • numpy_array = np.genfromtxt["file.csv", delimiter=";", skip_header=1]
    9sẽ xóa hàng trên chỉ số 4 của mảng
  • np.savetxt['file.txt',arr,delimiter=' ']0 sẽ xóa cột trên chỉ số 5 của mảng

Thống kê mô tả

Bạn có thể sử dụng các phương thức NumPy để lấy số liệu thống kê mô tả về mảng NumPy

  • np.savetxt['file.txt',arr,delimiter=' ']1 sẽ trả về giá trị trung bình dọc theo trục cụ thể [0 hoặc 1]
  • np.savetxt['file.txt',arr,delimiter=' ']2 sẽ trả về tổng của mảng
  • np.savetxt['file.txt',arr,delimiter=' ']3sẽ trả về giá trị nhỏ nhất của mảng
  • np.savetxt['file.txt',arr,delimiter=' ']4sẽ trả về giá trị lớn nhất của trục cụ thể
  • np.savetxt['file.txt',arr,delimiter=' ']5sẽ trả về phương sai của mảng
  • np.savetxt['file.txt',arr,delimiter=' ']6sẽ trả về độ lệch chuẩn của trục cụ thể
  • np.savetxt['file.txt',arr,delimiter=' ']7sẽ trả về hệ số tương quan của mảng
  • np.savetxt['file.txt',arr,delimiter=' ']8 sẽ trả về giá trị trung bình của các phần tử mảng

Làm toán với NumPy

Mọi hướng dẫn về NumPy sẽ không hoàn chỉnh nếu không có các phép toán số và toán học mà bạn có thể thực hiện với NumPy. Hãy lướt qua chúng

np.savetxt['file.txt',arr,delimiter=' ']9 sẽ thêm 1 vào mỗi phần tử trong mảng và np.savetxt['file.csv',arr,delimiter=',']0 sẽ thêm mảng 2 vào mảng 1. Điều này cũng đúng với np.savetxt['file.csv',arr,delimiter=',']1 — tất cả các lệnh này sẽ hoạt động theo cách chính xác như mô tả ở trên

Bạn cũng có thể yêu cầu NumPy trả về các giá trị khác nhau từ mảng, như

  • np.savetxt['file.csv',arr,delimiter=',']2 sẽ trả về căn bậc hai của mỗi phần tử trong mảng
  • np.savetxt['file.csv',arr,delimiter=',']3 sẽ trả về sin của từng phần tử trong mảng
  • np.savetxt['file.csv',arr,delimiter=',']4 sẽ trả về nhật ký tự nhiên của từng phần tử trong mảng
  • np.savetxt['file.csv',arr,delimiter=',']5 sẽ trả về giá trị tuyệt đối của từng phần tử trong mảng
  • np.savetxt['file.csv',arr,delimiter=',']6 sẽ trả về np.savetxt['file.csv',arr,delimiter=',']7 nếu các mảng có cùng phần tử và hình dạng

Có thể làm tròn các giá trị khác nhau trong mảng. np.savetxt['file.csv',arr,delimiter=',']8 sẽ làm tròn lên số nguyên gần nhất, np.savetxt['file.csv',arr,delimiter=',']9 sẽ làm tròn xuống số nguyên gần nhất và np.random.rand[3,4]0 sẽ làm tròn thành số nguyên gần nhất

Đây chỉ là phần nổi của tảng băng khi nói đến những gì bạn có thể làm với NumPy. Tôi hy vọng rằng bài đăng trên blog này đã giúp bạn thấy được các khả năng và mức độ mạnh mẽ của NumPy khi làm việc trên dữ liệu với Python. Nếu bạn thích hướng dẫn này, vui lòng xem hướng dẫn Pandas của tôi [tự quảng cáo bản thân một cách đáng xấu hổ. -P]. Như mọi khi, cảm ơn bạn đã đọc. Tôi sẽ đánh giá cao bất kỳ nhận xét, ghi chú, chỉnh sửa, câu hỏi hoặc đề xuất nào - nếu có bất cứ điều gì bạn muốn tôi viết về, xin vui lòng cho tôi biết. Hẹn gặp lại các bạn ở bài blog tiếp theo

Chủ Đề