Thư viện vật lý python

NumPy là một thư viện Python cung cấp cấu trúc dữ liệu đơn giản nhưng mạnh mẽ. mảng n chiều. Đây là nền tảng mà gần như tất cả sức mạnh của bộ công cụ khoa học dữ liệu của Python được xây dựng và học NumPy là bước đầu tiên trên hành trình của bất kỳ nhà khoa học dữ liệu Python nào. Hướng dẫn này sẽ cung cấp cho bạn kiến ​​thức cần thiết để sử dụng NumPy và các thư viện cấp cao hơn dựa trên nó

Show

Trong hướng dẫn này, bạn sẽ học

  • Những khái niệm cốt lõi nào trong khoa học dữ liệu được NumPy thực hiện
  • Cách tạo mảng NumPy bằng nhiều phương thức khác nhau
  • Cách thao tác mảng NumPy để thực hiện các phép tính hữu ích
  • Cách áp dụng những kỹ năng mới này vào các vấn đề trong thế giới thực

Để tận dụng tối đa hướng dẫn NumPy này, bạn nên làm quen với việc viết mã Python. Làm việc thông qua lộ trình học Giới thiệu về Python là một cách tuyệt vời để đảm bảo bạn đã nắm được các kỹ năng cơ bản. Nếu bạn quen thuộc với toán học ma trận, thì điều đó chắc chắn cũng sẽ hữu ích. Tuy nhiên, bạn không cần biết gì về khoa học dữ liệu. Bạn sẽ học được điều đó ở đây

Ngoài ra còn có một kho lưu trữ các mẫu mã NumPy mà bạn sẽ thấy trong hướng dẫn này. Bạn có thể sử dụng nó để tham khảo và thử nghiệm với các ví dụ để xem việc thay đổi mã thay đổi kết quả như thế nào. Để tải xuống mã, hãy nhấp vào liên kết bên dưới

Nhận mã mẫu. Nhấp vào đây để lấy mã mẫu mà bạn sẽ sử dụng để tìm hiểu về NumPy trong hướng dẫn này

Chọn NumPy. lợi ích

Vì bạn đã biết Python, nên bạn có thể tự hỏi liệu bạn có thực sự phải học một mô hình hoàn toàn mới để làm khoa học dữ liệu không. Các vòng lặp

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
9 của Python thật tuyệt vời. Đọc và ghi tệp CSV có thể được thực hiện bằng mã truyền thống. Tuy nhiên, có một số lập luận thuyết phục cho việc học một mô hình mới

Dưới đây là bốn lợi ích hàng đầu mà NumPy có thể mang lại cho mã của bạn

  1. Nhanh hơn. NumPy sử dụng các thuật toán được viết bằng C hoàn thành trong nano giây chứ không phải giây
  2. Ít vòng lặp hơn. NumPy giúp bạn giảm vòng lặp và không bị rối trong các chỉ số lặp
  3. mã rõ ràng hơn. Không có vòng lặp, mã của bạn sẽ trông giống phương trình mà bạn đang tính toán hơn
  4. Chất lượng tốt hơn. Có hàng nghìn cộng tác viên đang làm việc để giữ cho NumPy nhanh, thân thiện và không có lỗi

Vì những lợi ích này, NumPy là tiêu chuẩn thực tế cho các mảng đa chiều trong khoa học dữ liệu Python và nhiều thư viện phổ biến nhất được xây dựng trên đó. Học NumPy là một cách tuyệt vời để thiết lập nền tảng vững chắc khi bạn mở rộng kiến ​​thức của mình sang các lĩnh vực khoa học dữ liệu cụ thể hơn

Loại bỏ các quảng cáo

Cài đặt NumPy

Đã đến lúc thiết lập mọi thứ để bạn có thể bắt đầu học cách làm việc với NumPy. Có một số cách khác nhau để thực hiện việc này và bạn không thể sai khi làm theo hướng dẫn trên trang web NumPy. Nhưng có một số chi tiết bổ sung cần lưu ý được nêu dưới đây

Bạn cũng sẽ cài đặt Matplotlib. Bạn sẽ sử dụng nó trong một trong những ví dụ sau để khám phá cách các thư viện khác sử dụng NumPy

Sử dụng thay thế. nó với tư cách là Trình chỉnh sửa trực tuyến

Nếu bạn chỉ muốn bắt đầu với một số ví dụ, hãy làm theo hướng dẫn này và bắt đầu xây dựng một số bộ nhớ cơ với NumPy, sau đó Repl. nó là một lựa chọn tuyệt vời để chỉnh sửa trong trình duyệt. Bạn có thể đăng ký và kích hoạt môi trường Python trong vài phút. Dọc phía bên trái, có một tab dành cho các gói. Bạn có thể thêm bao nhiêu tùy thích. Đối với hướng dẫn NumPy này, hãy sử dụng các phiên bản hiện tại của NumPy và Matplotlib

Đây là nơi bạn có thể tìm thấy các gói trong giao diện

Thư viện vật lý python

May mắn thay, họ cho phép bạn chỉ cần nhấp và cài đặt

Cài đặt NumPy với Anaconda

Bản phân phối Anaconda là một bộ công cụ khoa học dữ liệu Python phổ biến đi kèm với trình quản lý gói giúp quản lý môi trường ảo và các phần phụ thuộc dự án của bạn. Nó được xây dựng xung quanh

$ pip install ipython
0, là trình quản lý gói thực tế. Đây là phương pháp được đề xuất bởi dự án NumPy, đặc biệt nếu bạn đang bước vào khoa học dữ liệu trong Python mà chưa thiết lập môi trường phát triển phức tạp

Nếu bạn đã có một quy trình công việc mà bạn thích sử dụng

$ pip install ipython
1, Pipenv, hoặc một số bộ công cụ khác, thì tốt hơn hết là không nên thêm
$ pip install ipython
0 vào hỗn hợp. Kho lưu trữ gói
$ pip install ipython
0 tách biệt với PyPI và bản thân
$ pip install ipython
0 thiết lập một đảo gói nhỏ riêng biệt trên máy của bạn, vì vậy việc quản lý đường dẫn và ghi nhớ gói nào tồn tại ở đâu có thể là một cơn ác mộng

Khi bạn đã cài đặt ____1_______0, bạn có thể chạy lệnh ____1_______6 cho các thư viện bạn sẽ cần

________số 8_______

Thao tác này sẽ cài đặt những gì bạn cần cho hướng dẫn NumPy này và bạn sẽ sẵn sàng sử dụng

Cài đặt NumPy với $ pip install ipython 1

Mặc dù dự án NumPy khuyên bạn nên sử dụng

$ pip install ipython
0 nếu bạn mới bắt đầu, không có gì sai khi tự quản lý môi trường của mình và chỉ sử dụng
$ pip install ipython
1 cũ, Pipenv, Thơ hoặc bất kỳ thứ gì khác mà bạn yêu thích

Dưới đây là các lệnh để thiết lập với

$ pip install ipython
1

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...

Sau đó, đảm bảo môi trường ảo của bạn được kích hoạt và tất cả mã của bạn sẽ chạy như mong đợi

Sử dụng IPython, Notebooks hoặc JupyterLab

Mặc dù các phần trên sẽ cung cấp cho bạn mọi thứ bạn cần để bắt đầu, nhưng có một số công cụ khác mà bạn có thể tùy chọn cài đặt để làm việc trong khoa học dữ liệu thân thiện hơn với nhà phát triển

IPython là một vòng lặp đọc-đánh giá-in (REPL) được nâng cấp của Python giúp chỉnh sửa mã trong phiên thông dịch trực tiếp trở nên đơn giản và đẹp hơn. Đây là phiên IPython REPL trông như thế nào

>>>

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])

Nó có một số điểm khác biệt so với REPL cơ bản của Python, bao gồm số dòng, cách sử dụng màu sắc và chất lượng của hình ảnh mảng. Ngoài ra còn có rất nhiều phần thưởng trải nghiệm người dùng giúp việc nhập, nhập lại và chỉnh sửa mã trở nên dễ chịu hơn

Bạn có thể cài đặt IPython dưới dạng độc lập

$ pip install ipython

Ngoài ra, nếu bạn đợi và cài đặt bất kỳ công cụ nào tiếp theo, thì chúng sẽ bao gồm một bản sao của IPython

Một thay thế đặc trưng hơn một chút cho REPL là sổ ghi chép. Tuy nhiên, Notebook là một phong cách viết Python hơi khác so với các tập lệnh tiêu chuẩn. Thay vì một tệp Python truyền thống, chúng cung cấp cho bạn một loạt tập lệnh nhỏ được gọi là các ô mà bạn có thể chạy đi chạy lại theo bất kỳ thứ tự nào bạn muốn, tất cả trong cùng một phiên bộ nhớ Python

Một điều thú vị về sổ ghi chép là bạn có thể bao gồm các biểu đồ và hiển thị các đoạn Markdown giữa các ô, vì vậy chúng thực sự tuyệt vời để viết các phân tích dữ liệu ngay bên trong mã

Đây là những gì nó trông giống như

Thư viện vật lý python

Sản phẩm máy tính xách tay phổ biến nhất có lẽ là Máy tính xách tay Jupyter, nhưng nteract là một tùy chọn khác bao bọc chức năng của Jupyter và cố gắng làm cho nó dễ tiếp cận và mạnh mẽ hơn một chút.

Tuy nhiên, nếu bạn đang xem Jupyter Notebook và nghĩ rằng nó cần nhiều phẩm chất giống IDE hơn, thì JupyterLab là một lựa chọn khác. Bạn có thể tùy chỉnh trình soạn thảo văn bản, sổ ghi chép, thiết bị đầu cuối và các thành phần tùy chỉnh, tất cả đều có trong giao diện dựa trên trình duyệt. Nó có thể sẽ thoải mái hơn cho những người đến từ MatLab. Nó là người trẻ nhất trong số các dịch vụ, nhưng nó là 1. 0 đã được phát hành trở lại vào năm 2019, vì vậy nó phải ổn định và đầy đủ tính năng

Đây là giao diện trông như thế nào

Thư viện vật lý python

Cho dù bạn chọn tùy chọn nào, sau khi cài đặt xong, bạn sẽ sẵn sàng chạy những dòng mã NumPy đầu tiên của mình. Đã đến lúc cho ví dụ đầu tiên

Loại bỏ các quảng cáo

Xin chào NumPy. Hướng dẫn kiểm tra điểm cong

Ví dụ đầu tiên này giới thiệu một số khái niệm cốt lõi trong NumPy mà bạn sẽ sử dụng trong suốt phần còn lại của hướng dẫn

  • Tạo mảng bằng cách sử dụng
     1>>> import numpy as np
     2>>> CURVE_CENTER = 80
     3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
     4>>> def curve(grades):
     5..     average = grades.mean()
     6..     change = CURVE_CENTER - average
     7..     new_grades = grades + change
     8..     return np.clip(new_grades, grades, 100)
     9...
    10>>> curve(grades)
    11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
    
    2
  • Xử lý các mảng hoàn chỉnh như các giá trị riêng lẻ để làm cho các phép tính được vector hóa dễ đọc hơn
  • Sử dụng các hàm NumPy tích hợp để sửa đổi và tổng hợp dữ liệu

Những khái niệm này là cốt lõi của việc sử dụng NumPy một cách hiệu quả

Kịch bản là thế này. Bạn là giáo viên vừa chấm điểm cho học sinh của mình trong bài kiểm tra gần đây. Thật không may, bạn có thể đã làm bài kiểm tra quá khó và hầu hết học sinh đều làm bài kém hơn mong đợi. Để giúp đỡ mọi người, bạn sẽ làm cong điểm số của mọi người

Nó sẽ là một đường cong tương đối thô sơ, mặc dù. Bạn sẽ lấy bất kể điểm trung bình là bao nhiêu và tuyên bố rằng điểm C. Ngoài ra, bạn sẽ đảm bảo rằng đường cong không vô tình làm ảnh hưởng đến điểm số của học sinh hoặc giúp học sinh làm tốt hơn 100%

Nhập mã này vào REPL của bạn

>>>

 1>>> import numpy as np
 2>>> CURVE_CENTER = 80
 3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
 4>>> def curve(grades):
 5..     average = grades.mean()
 6..     change = CURVE_CENTER - average
 7..     new_grades = grades + change
 8..     return np.clip(new_grades, grades, 100)
 9...
10>>> curve(grades)
11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])

Điểm ban đầu đã được tăng lên dựa trên vị trí của chúng trong gói, nhưng không có điểm nào trong số chúng được đẩy lên hơn 100%

Dưới đây là những điểm nhấn quan trọng

  • Dòng 1 nhập NumPy bằng bí danh
     1>>> import numpy as np
     2>>> CURVE_CENTER = 80
     3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
     4>>> def curve(grades):
     5..     average = grades.mean()
     6..     change = CURVE_CENTER - average
     7..     new_grades = grades + change
     8..     return np.clip(new_grades, grades, 100)
     9...
    10>>> curve(grades)
    11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
    
    3, đây là một quy ước phổ biến giúp bạn tiết kiệm một vài lần nhấn phím
  • Dòng 3 tạo mảng NumPy đầu tiên của bạn, là mảng một chiều và có hình dạng là
     1>>> import numpy as np
     2>>> CURVE_CENTER = 80
     3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
     4>>> def curve(grades):
     5..     average = grades.mean()
     6..     change = CURVE_CENTER - average
     7..     new_grades = grades + change
     8..     return np.clip(new_grades, grades, 100)
     9...
    10>>> curve(grades)
    11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
    
    4 và kiểu dữ liệu là
     1>>> import numpy as np
     2>>> CURVE_CENTER = 80
     3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
     4>>> def curve(grades):
     5..     average = grades.mean()
     6..     change = CURVE_CENTER - average
     7..     new_grades = grades + change
     8..     return np.clip(new_grades, grades, 100)
     9...
    10>>> curve(grades)
    11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
    
    5. Đừng lo lắng quá nhiều về những chi tiết này. Bạn sẽ khám phá chúng chi tiết hơn ở phần sau của hướng dẫn
  • Dòng 5 lấy trung bình của tất cả các điểm bằng cách sử dụng. Mảng có rất nhiều

Ở dòng 7, bạn tận dụng hai khái niệm quan trọng cùng một lúc

  1. Vector hóa
  2. Phát thanh truyền hình

Vectorization là quá trình thực hiện cùng một thao tác theo cùng một cách cho từng phần tử trong một mảng. Điều này loại bỏ

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
9 vòng lặp khỏi mã của bạn nhưng đạt được kết quả tương tự

Phát sóng là quá trình mở rộng hai mảng có hình dạng khác nhau và tìm ra cách thực hiện phép tính vector hóa giữa chúng. Hãy nhớ rằng,

 1>>> import numpy as np
 2>>> CURVE_CENTER = 80
 3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
 4>>> def curve(grades):
 5..     average = grades.mean()
 6..     change = CURVE_CENTER - average
 7..     new_grades = grades + change
 8..     return np.clip(new_grades, grades, 100)
 9...
10>>> curve(grades)
11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
8 là một mảng các số có hình dạng
 1>>> import numpy as np
 2>>> CURVE_CENTER = 80
 3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
 4>>> def curve(grades):
 5..     average = grades.mean()
 6..     change = CURVE_CENTER - average
 7..     new_grades = grades + change
 8..     return np.clip(new_grades, grades, 100)
 9...
10>>> curve(grades)
11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
4 và
In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
0 là một số vô hướng, hoặc một số, về cơ bản có hình dạng
In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
1. Trong trường hợp này, NumPy thêm vô hướng vào từng mục trong mảng và trả về một mảng mới với kết quả

Cuối cùng, trên dòng 8, bạn giới hạn hoặc cắt các giá trị thành một tập hợp các giá trị tối thiểu và tối đa. Ngoài các phương thức mảng, NumPy còn có một số lượng lớn các hàm tích hợp. Bạn không cần phải ghi nhớ tất cả—đó là mục đích của tài liệu. Bất cứ khi nào bạn gặp khó khăn hoặc cảm thấy cần có một cách dễ dàng hơn để làm điều gì đó, hãy xem qua tài liệu và xem liệu đã có quy trình nào thực hiện chính xác những gì bạn cần chưa

Trong trường hợp này, bạn cần một hàm nhận vào một mảng và đảm bảo các giá trị không vượt quá mức tối thiểu hoặc tối đa nhất định.

In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
2 thực hiện chính xác điều đó

Dòng 8 cũng cung cấp một ví dụ khác về phát sóng. Đối với đối số thứ hai của

In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
2, bạn vượt qua
 1>>> import numpy as np
 2>>> CURVE_CENTER = 80
 3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
 4>>> def curve(grades):
 5..     average = grades.mean()
 6..     change = CURVE_CENTER - average
 7..     new_grades = grades + change
 8..     return np.clip(new_grades, grades, 100)
 9...
10>>> curve(grades)
11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
8, đảm bảo rằng mỗi điểm cong mới không thấp hơn điểm ban đầu. Nhưng đối với đối số thứ ba, bạn chuyển một giá trị duy nhất.
In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
5. NumPy lấy giá trị đó và phát nó cho mọi phần tử trong
In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
6, đảm bảo rằng không có điểm nào trong số các điểm cong mới vượt quá điểm hoàn hảo

Bắt đầu vào hình dạng. Hình dạng mảng và trục

Bây giờ bạn đã thấy một số điều mà NumPy có thể làm, đã đến lúc củng cố nền tảng đó bằng một số lý thuyết quan trọng. Có một vài khái niệm quan trọng cần ghi nhớ, đặc biệt khi bạn làm việc với mảng ở các chiều cao hơn

Các vectơ, là mảng một chiều của các số, ít phức tạp nhất để theo dõi. Hai chiều cũng không quá tệ vì chúng tương tự như bảng tính. Nhưng mọi thứ bắt đầu trở nên phức tạp ở ba chiều và hình dung bốn chiều?

Loại bỏ các quảng cáo

Làm chủ hình dạng

Hình dạng là một khái niệm quan trọng khi bạn đang sử dụng mảng nhiều chiều. Tại một thời điểm nhất định, bạn sẽ dễ dàng quên đi việc trực quan hóa hình dạng dữ liệu của mình và thay vào đó tuân theo một số quy tắc tinh thần và tin tưởng NumPy sẽ cho bạn biết hình dạng chính xác

Tất cả các mảng đều có một thuộc tính gọi là

In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
7 trả về một bộ có kích thước theo từng chiều. Thứ nguyên nào ít quan trọng hơn, nhưng điều quan trọng là các mảng bạn chuyển đến các hàm có hình dạng mà các hàm mong đợi. Một cách phổ biến để xác nhận rằng dữ liệu của bạn có hình dạng phù hợp là in dữ liệu và hình dạng của nó cho đến khi bạn chắc chắn rằng mọi thứ đang hoạt động như mong đợi

Ví dụ tiếp theo này sẽ hiển thị quá trình này. Bạn sẽ tạo một mảng có hình dạng phức tạp, kiểm tra nó và sắp xếp lại để nó trông giống như

>>>

In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])

Tại đây, bạn sử dụng một phương thức

In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
8 có tên là
In [1]: import numpy as np

In [2]: temperatures = np.array([
   ...:     29.3, 42.1, 18.8, 16.1, 38.0, 12.5,
   ...:     12.6, 49.9, 38.6, 31.3, 9.2, 22.2
   ...: ]).reshape(2, 2, 3)

In [3]: temperatures.shape
Out[3]: (2, 2, 3)

In [4]: temperatures
Out[4]:
array([[[29.3, 42.1, 18.8],
        [16.1, 38. , 12.5]],

       [[12.6, 49.9, 38.6],
        [31.3,  9.2, 22.2]]])

In [5]: np.swapaxes(temperatures, 1, 2)
Out[5]:
array([[[29.3, 16.1],
        [42.1, 38. ],
        [18.8, 12.5]],

       [[12.6, 31.3],
        [49.9,  9.2],
        [38.6, 22.2]]])
9 để tạo khối dữ liệu 2 × 2 × 3. Khi bạn kiểm tra hình dạng của mảng trong đầu vào 3, nó chính xác như bạn đã nói. Tuy nhiên, bạn có thể thấy các mảng được in nhanh chóng trở nên khó hình dung như thế nào trong không gian ba chiều trở lên. Sau khi bạn hoán đổi các trục với
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
0, sẽ rõ ràng hơn một chút về kích thước nào. Bạn sẽ thấy nhiều hơn về các trục trong phần tiếp theo

Hình dạng sẽ xuất hiện trở lại trong phần phát sóng. Hiện tại, hãy nhớ rằng những tấm séc nhỏ này không tốn bất kỳ chi phí nào. Bạn luôn có thể xóa các ô hoặc loại bỏ mã sau khi mọi thứ đang chạy trơn tru

Hiểu các trục

Ví dụ trên cho thấy tầm quan trọng của việc biết không chỉ dữ liệu của bạn ở dạng nào mà còn biết dữ liệu nào nằm trong trục nào. Trong mảng NumPy, các trục không được lập chỉ mục và xác định thứ nguyên nào. Ví dụ mảng hai chiều có trục tung (trục 0) và trục hoành (trục 1). Rất nhiều hàm và lệnh trong NumPy thay đổi hành vi của chúng dựa trên trục mà bạn yêu cầu chúng xử lý

Ví dụ này sẽ cho thấy cách hoạt động của

In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
1 theo mặc định, không có đối số
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
2 và cách nó thay đổi chức năng tùy thuộc vào việc bạn chỉ định
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
2 nào khi cung cấp đối số

>>>

In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])

Theo mặc định,

In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
1 trả về giá trị lớn nhất trong toàn bộ mảng, bất kể có bao nhiêu thứ nguyên. Tuy nhiên, sau khi bạn chỉ định một trục, nó sẽ thực hiện phép tính đó cho từng tập hợp giá trị dọc theo trục cụ thể đó. Ví dụ: với đối số là
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
5,
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
1 chọn giá trị lớn nhất trong mỗi nhóm trong bốn bộ giá trị theo chiều dọc của
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
7 và trả về một mảng đã được làm phẳng hoặc được tổng hợp thành một mảng một chiều

Trên thực tế, nhiều chức năng của NumPy hoạt động theo cách này. Nếu không có trục nào được chỉ định, thì chúng sẽ thực hiện thao tác trên toàn bộ tập dữ liệu. Mặt khác, chúng thực hiện thao tác theo kiểu trục

Phát thanh truyền hình

Cho đến nay, bạn đã thấy một vài ví dụ nhỏ hơn về phát sóng, nhưng chủ đề sẽ bắt đầu có ý nghĩa hơn khi bạn thấy nhiều ví dụ hơn. Về cơ bản, nó hoạt động xung quanh một quy tắc. các mảng có thể được phát với nhau nếu kích thước của chúng khớp nhau hoặc nếu một trong các mảng có kích thước là

In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
8

Nếu các mảng khớp nhau về kích thước dọc theo một trục, thì các phần tử sẽ được vận hành trên từng phần tử, tương tự như cách hoạt động của hàm

In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
9 trong Python. Nếu một trong các mảng có kích thước
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
8 trong một trục, thì giá trị đó sẽ được phát dọc theo trục đó hoặc được nhân đôi nhiều lần nếu cần để khớp với số lượng phần tử dọc theo trục đó trong mảng khác

Đây là một ví dụ nhanh. Mảng

In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
1 có dạng
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
2 và mảng
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
3 có dạng
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
4. Dựa vào các quy tắc trên, bạn có thể thao tác trên các mảng này với nhau

  • Ở trục 0,
    In [1]: import numpy as np
    
    In [2]: A = np.arange(32).reshape(4, 1, 8)
    
    In [3]: A
    Out[3]:
    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]],
    
           [[24, 25, 26, 27, 28, 29, 30, 31]]])
    
    In [4]: B = np.arange(48).reshape(1, 6, 8)
    
    In [5]: B
    Out[5]:
    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],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47]]])
    
    1 có một
    In [1]: import numpy as np
    
    In [2]: A = np.arange(32).reshape(4, 1, 8)
    
    In [3]: A
    Out[3]:
    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]],
    
           [[24, 25, 26, 27, 28, 29, 30, 31]]])
    
    In [4]: B = np.arange(48).reshape(1, 6, 8)
    
    In [5]: B
    Out[5]:
    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],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47]]])
    
    6 và
    In [1]: import numpy as np
    
    In [2]: A = np.arange(32).reshape(4, 1, 8)
    
    In [3]: A
    Out[3]:
    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]],
    
           [[24, 25, 26, 27, 28, 29, 30, 31]]])
    
    In [4]: B = np.arange(48).reshape(1, 6, 8)
    
    In [5]: B
    Out[5]:
    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],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47]]])
    
    3 có một
    In [1]: import numpy as np
    
    In [2]: table = np.array([
       ...:     [5, 3, 7, 1],
       ...:     [2, 6, 7 ,9],
       ...:     [1, 1, 1, 1],
       ...:     [4, 3, 2, 0],
       ...: ])
    
    In [3]: table.max()
    Out[3]: 9
    
    In [4]: table.max(axis=0)
    Out[4]: array([5, 6, 7, 9])
    
    In [5]: table.max(axis=1)
    Out[5]: array([7, 9, 1, 4])
    
    8, do đó,
    In [1]: import numpy as np
    
    In [2]: A = np.arange(32).reshape(4, 1, 8)
    
    In [3]: A
    Out[3]:
    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]],
    
           [[24, 25, 26, 27, 28, 29, 30, 31]]])
    
    In [4]: B = np.arange(48).reshape(1, 6, 8)
    
    In [5]: B
    Out[5]:
    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],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47]]])
    
    3 có thể được phát dọc theo trục đó
  • Ở trục 1,
    In [1]: import numpy as np
    
    In [2]: A = np.arange(32).reshape(4, 1, 8)
    
    In [3]: A
    Out[3]:
    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]],
    
           [[24, 25, 26, 27, 28, 29, 30, 31]]])
    
    In [4]: B = np.arange(48).reshape(1, 6, 8)
    
    In [5]: B
    Out[5]:
    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],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47]]])
    
    1 có số 1 và
    In [1]: import numpy as np
    
    In [2]: A = np.arange(32).reshape(4, 1, 8)
    
    In [3]: A
    Out[3]:
    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]],
    
           [[24, 25, 26, 27, 28, 29, 30, 31]]])
    
    In [4]: B = np.arange(48).reshape(1, 6, 8)
    
    In [5]: B
    Out[5]:
    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],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47]]])
    
    3 có số 6, do đó,
    In [1]: import numpy as np
    
    In [2]: A = np.arange(32).reshape(4, 1, 8)
    
    In [3]: A
    Out[3]:
    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]],
    
           [[24, 25, 26, 27, 28, 29, 30, 31]]])
    
    In [4]: B = np.arange(48).reshape(1, 6, 8)
    
    In [5]: B
    Out[5]:
    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],
            [24, 25, 26, 27, 28, 29, 30, 31],
            [32, 33, 34, 35, 36, 37, 38, 39],
            [40, 41, 42, 43, 44, 45, 46, 47]]])
    
    1 có thể được phát dọc theo trục đó
  • Ở trục 2, 2 mảng có kích thước khớp nhau nên vận hành thuận lợi

Cả ba trục đều tuân thủ thành công quy tắc

Bạn có thể thiết lập các mảng như thế này

>>>_______ 47 _______

In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])

In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
1 có
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
6 mặt phẳng, mỗi mặt phẳng có
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
8 hàng và
In [7]: A + B
Out[7]:
array([[[ 0,  2,  4,  6,  8, 10, 12, 14],
        [ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54]],

       [[ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62]],

       [[16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70]],

       [[24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70],
        [64, 66, 68, 70, 72, 74, 76, 78]]])
6 cột.
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
3 chỉ có mặt phẳng
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
8 với
In [7]: A + B
Out[7]:
array([[[ 0,  2,  4,  6,  8, 10, 12, 14],
        [ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54]],

       [[ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62]],

       [[16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70]],

       [[24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70],
        [64, 66, 68, 70, 72, 74, 76, 78]]])
9 hàng và
In [7]: A + B
Out[7]:
array([[[ 0,  2,  4,  6,  8, 10, 12, 14],
        [ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54]],

       [[ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62]],

       [[16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70]],

       [[24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70],
        [64, 66, 68, 70, 72, 74, 76, 78]]])
6 cột. Xem những gì NumPy làm cho bạn khi bạn cố gắng thực hiện phép tính giữa chúng

Cộng hai mảng lại với nhau

>>>_______ 63 _______

In [7]: A + B
Out[7]:
array([[[ 0,  2,  4,  6,  8, 10, 12, 14],
        [ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54]],

       [[ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62]],

       [[16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70]],

       [[24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70],
        [64, 66, 68, 70, 72, 74, 76, 78]]])

Cách phát sóng hoạt động là NumPy sao chép mặt phẳng trong

In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
3 ba lần để bạn có tổng cộng bốn, khớp với số lượng mặt phẳng trong
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
1. Nó cũng sao chép một hàng trong
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
1 năm lần với tổng số sáu lần, khớp với số hàng trong
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
3. Sau đó, nó thêm từng phần tử trong mảng
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
1 mới được mở rộng vào đối tác của nó ở cùng một vị trí trong
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
3. Kết quả của mỗi phép tính hiển thị ở vị trí tương ứng của đầu ra

Ghi chú. Đây là một cách hay để tạo một mảng từ một phạm vi bằng cách sử dụng

In [1]: import numpy as np

In [2]: square = np.array([
   ...:     [16, 3, 2, 13],
   ...:     [5, 10, 11, 8],
   ...:     [9, 6, 7, 12],
   ...:     [4, 15, 14, 1]
   ...: ])

In [3]: for i in range(4):
   ...:     assert square[:, i].sum() == 34
   ...:     assert square[i, :].sum() == 34
   ...:

In [4]: assert square[:2, :2].sum() == 34

In [5]: assert square[2:, :2].sum() == 34

In [6]: assert square[:2, 2:].sum() == 34

In [7]: assert square[2:, 2:].sum() == 34
7

Một lần nữa, mặc dù bạn có thể sử dụng các từ như “mặt phẳng”, “hàng” và “cột” để mô tả cách các hình dạng trong ví dụ này được phát rộng để tạo ra các hình dạng ba chiều phù hợp, mọi thứ trở nên phức tạp hơn ở các kích thước cao hơn. Rất nhiều lần, bạn sẽ chỉ cần tuân theo các quy tắc phát sóng và thực hiện nhiều bản in để đảm bảo mọi thứ hoạt động theo đúng kế hoạch

Hiểu về phát sóng là một phần quan trọng trong việc thành thạo các phép tính được véc tơ hóa và các phép tính được véc tơ hóa là cách để viết mã NumPy rõ ràng, thành ngữ

Loại bỏ các quảng cáo

Hoạt động khoa học dữ liệu. Lọc, Đặt hàng, Tổng hợp

Điều đó kết thúc một phần nặng về lý thuyết nhưng hơi nhẹ về các ví dụ thực tế, trong thế giới thực. Trong phần này, bạn sẽ làm việc thông qua một số ví dụ về hoạt động khoa học dữ liệu thực tế, hữu ích. Lọc, sắp xếp và tổng hợp dữ liệu

lập chỉ mục

Lập chỉ mục sử dụng nhiều thành ngữ giống như mã Python bình thường sử dụng. Bạn có thể sử dụng các chỉ số dương hoặc âm để lập chỉ mục từ phía trước hoặc phía sau của mảng. Bạn có thể sử dụng dấu hai chấm (

In [1]: import numpy as np

In [2]: square = np.array([
   ...:     [16, 3, 2, 13],
   ...:     [5, 10, 11, 8],
   ...:     [9, 6, 7, 12],
   ...:     [4, 15, 14, 1]
   ...: ])

In [3]: for i in range(4):
   ...:     assert square[:, i].sum() == 34
   ...:     assert square[i, :].sum() == 34
   ...:

In [4]: assert square[:2, :2].sum() == 34

In [5]: assert square[2:, :2].sum() == 34

In [6]: assert square[:2, 2:].sum() == 34

In [7]: assert square[2:, 2:].sum() == 34
8) để chỉ định “phần còn lại” hoặc “tất cả” và thậm chí bạn có thể sử dụng hai dấu hai chấm để bỏ qua các phần tử như với danh sách Python thông thường

Đây là sự khác biệt. Mảng NumPy sử dụng dấu phẩy giữa các trục, vì vậy bạn có thể lập chỉ mục cho nhiều trục trong một bộ dấu ngoặc vuông. Một ví dụ là cách dễ nhất để thể hiện điều này. Đã đến lúc xác nhận

Hình vuông dưới đây có một số tính chất tuyệt vời. Nếu bạn cộng bất kỳ hàng, cột hoặc đường chéo nào, thì bạn sẽ nhận được cùng một số, 34. Đó cũng là những gì bạn sẽ nhận được nếu cộng từng ô trong số bốn góc phần tư, bốn ô vuông ở giữa, bốn ô vuông ở góc hoặc bốn ô vuông ở góc của bất kỳ lưới 3 × 3 nào có trong đó. Bạn sẽ chứng minh điều đó

Sự thật thú vị. Ở hàng dưới cùng, số 15 và 14 nằm ở giữa, thể hiện năm mà Dürer đã tạo ra hình vuông này. Các số 1 và 4 cũng nằm trong hàng đó, đại diện cho các chữ cái đầu tiên và thứ tư của bảng chữ cái, A và D, là tên viết tắt của người tạo ra hình vuông, Albrecht Dürer

Nhập thông tin sau vào REPL của bạn

>>>

In [1]: import numpy as np

In [2]: square = np.array([
   ...:     [16, 3, 2, 13],
   ...:     [5, 10, 11, 8],
   ...:     [9, 6, 7, 12],
   ...:     [4, 15, 14, 1]
   ...: ])

In [3]: for i in range(4):
   ...:     assert square[:, i].sum() == 34
   ...:     assert square[i, :].sum() == 34
   ...:

In [4]: assert square[:2, :2].sum() == 34

In [5]: assert square[2:, :2].sum() == 34

In [6]: assert square[:2, 2:].sum() == 34

In [7]: assert square[2:, 2:].sum() == 34

Bên trong vòng lặp

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
9, bạn xác minh rằng tất cả các hàng và tất cả các cột có tổng bằng 34. Sau đó, bằng cách sử dụng lập chỉ mục có chọn lọc, bạn xác minh rằng mỗi góc phần tư cũng cộng tới 34

Một điều cuối cùng cần lưu ý là bạn có thể lấy tổng của bất kỳ mảng nào để cộng tất cả các phần tử của nó trên toàn cầu với

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
00. Thay vào đó, phương pháp này cũng có thể sử dụng đối số
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
2 để thực hiện tính tổng theo trục

Tạo mặt nạ và lọc

Lựa chọn dựa trên chỉ mục là tuyệt vời, nhưng nếu bạn muốn lọc dữ liệu của mình dựa trên các tiêu chí không thống nhất hoặc không theo trình tự phức tạp hơn thì sao?

Mặt nạ là một mảng có hình dạng chính xác giống như dữ liệu của bạn, nhưng thay vì các giá trị của bạn, nó chứa các giá trị Boolean. hoặc là

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
02 hoặc là
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
03. Bạn có thể sử dụng mảng mặt nạ này để lập chỉ mục vào mảng dữ liệu của mình theo những cách phức tạp và phi tuyến tính. Nó sẽ trả về tất cả các phần tử mà mảng Boolean có giá trị
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
02

Đây là một ví dụ cho thấy quy trình, đầu tiên là chuyển động chậm và sau đó là cách nó thường được thực hiện, tất cả trong một dòng

>>>

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
0

Bạn sẽ thấy phần giải thích về các thủ thuật tạo mảng mới trong đầu vào 2 trong giây lát, nhưng hiện tại, hãy tập trung vào nội dung chính của ví dụ. Đây là những phần quan trọng

  • Đầu vào 4 tạo mặt nạ bằng cách thực hiện tính toán Boolean được véc tơ hóa, lấy từng phần tử và kiểm tra xem liệu nó có chia đều cho bốn không. Điều này trả về một mảng mặt nạ có cùng hình dạng với kết quả tính toán theo từng phần tử
  • Đầu vào 6 sử dụng mặt nạ này để lập chỉ mục vào mảng
    $ mkdir numpy-tutorial
    $ cd numpy-tutorial
    $ python3 -m venv .numpy-tutorial-venv
    $ source .numpy-tutorial-venv/bin/activate
    
    (.numpy-tutorial-venv)
    $ pip install numpy matplotlib
    Collecting numpy
      Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
         |████████████████████████████████| 15.3 MB 2.7 MB/s
    Collecting matplotlib
      Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
         |████████████████████████████████| 11.4 MB 16.8 MB/s
    ...
    
    05 ban đầu. Điều này làm cho mảng mất đi hình dạng ban đầu, giảm nó xuống một chiều, nhưng bạn vẫn nhận được dữ liệu mà mình đang tìm kiếm
  • Đầu vào 7 cung cấp một lựa chọn mặt nạ thành ngữ, truyền thống hơn mà bạn có thể thấy trong tự nhiên, với một mảng lọc ẩn danh được tạo nội tuyến, bên trong dấu ngoặc chọn. Cú pháp này tương tự như cách sử dụng trong ngôn ngữ lập trình R

Quay lại đầu vào 2, bạn gặp ba khái niệm mới

  1. Sử dụng
    $ mkdir numpy-tutorial
    $ cd numpy-tutorial
    $ python3 -m venv .numpy-tutorial-venv
    $ source .numpy-tutorial-venv/bin/activate
    
    (.numpy-tutorial-venv)
    $ pip install numpy matplotlib
    Collecting numpy
      Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
         |████████████████████████████████| 15.3 MB 2.7 MB/s
    Collecting matplotlib
      Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
         |████████████████████████████████| 11.4 MB 16.8 MB/s
    ...
    
    06 để tạo một mảng cách đều nhau
  2. Đặt
    $ mkdir numpy-tutorial
    $ cd numpy-tutorial
    $ python3 -m venv .numpy-tutorial-venv
    $ source .numpy-tutorial-venv/bin/activate
    
    (.numpy-tutorial-venv)
    $ pip install numpy matplotlib
    Collecting numpy
      Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
         |████████████████████████████████| 15.3 MB 2.7 MB/s
    Collecting matplotlib
      Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
         |████████████████████████████████| 11.4 MB 16.8 MB/s
    ...
    
    07 của đầu ra
  3. Định hình lại một mảng với
    $ mkdir numpy-tutorial
    $ cd numpy-tutorial
    $ python3 -m venv .numpy-tutorial-venv
    $ source .numpy-tutorial-venv/bin/activate
    
    (.numpy-tutorial-venv)
    $ pip install numpy matplotlib
    Collecting numpy
      Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
         |████████████████████████████████| 15.3 MB 2.7 MB/s
    Collecting matplotlib
      Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
         |████████████████████████████████| 11.4 MB 16.8 MB/s
    ...
    
    08

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
06 tạo n số được phân bổ đều giữa số tối thiểu và số tối đa, rất hữu ích cho việc lấy mẫu phân bố đều trong biểu đồ khoa học

Do tính toán cụ thể trong ví dụ này, nên việc có trong mảng

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
05 dễ dàng hơn. Nhưng vì khoảng cách giữa 5 và 50 không chia hết cho 24 nên các số kết quả sẽ là. Bạn chỉ định một
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07 của
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
12 để buộc hàm làm tròn xuống và cung cấp cho bạn các số nguyên. Bạn sẽ thấy một cuộc thảo luận chi tiết hơn về các loại dữ liệu sau này

Cuối cùng,

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
13 có thể lấy
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
08 làm một trong các kích thước chiều của nó. Điều đó có nghĩa là NumPy chỉ nên tìm ra trục cụ thể đó cần lớn như thế nào dựa trên kích thước của các trục khác. Trong trường hợp này, với các giá trị
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
15 và kích thước là
In [1]: import numpy as np

In [2]: A = np.arange(32).reshape(4, 1, 8)

In [3]: A
Out[3]:
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]],

       [[24, 25, 26, 27, 28, 29, 30, 31]]])

In [4]: B = np.arange(48).reshape(1, 6, 8)

In [5]: B
Out[5]:
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],
        [24, 25, 26, 27, 28, 29, 30, 31],
        [32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])
6 ở trục 0, trục 1 kết thúc với kích thước là
In [7]: A + B
Out[7]:
array([[[ 0,  2,  4,  6,  8, 10, 12, 14],
        [ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54]],

       [[ 8, 10, 12, 14, 16, 18, 20, 22],
        [16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62]],

       [[16, 18, 20, 22, 24, 26, 28, 30],
        [24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70]],

       [[24, 26, 28, 30, 32, 34, 36, 38],
        [32, 34, 36, 38, 40, 42, 44, 46],
        [40, 42, 44, 46, 48, 50, 52, 54],
        [48, 50, 52, 54, 56, 58, 60, 62],
        [56, 58, 60, 62, 64, 66, 68, 70],
        [64, 66, 68, 70, 72, 74, 76, 78]]])
9

Đây là một ví dụ nữa để thể hiện sức mạnh của bộ lọc theo mặt nạ. Phân phối chuẩn là một phân phối xác suất trong đó khoảng 95. 45% giá trị xảy ra trong hai độ lệch chuẩn của giá trị trung bình

Bạn có thể xác minh điều đó với một chút trợ giúp từ mô-đun

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
18 của NumPy để tạo các giá trị ngẫu nhiên

>>>

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
1

Tại đây, bạn sử dụng một cú pháp có vẻ lạ để kết hợp các điều kiện lọc. toán tử nhị phân

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
19. Tại sao lại như vậy? . Nếu bạn cố gắng thực hiện
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
22, thì bạn sẽ nhận được cảnh báo về giá trị thực của một mảng là kỳ lạ như thế nào, bởi vì
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
23 đang hoạt động dựa trên giá trị thực của toàn bộ mảng, không phải từng phần tử

Loại bỏ các quảng cáo

Chuyển đổi, sắp xếp và nối

Các thao tác khác, mặc dù không phổ biến như lập chỉ mục hoặc lọc, nhưng cũng có thể rất hữu ích tùy thuộc vào tình huống bạn gặp phải. Bạn sẽ thấy một vài ví dụ trong phần này

Đây là hoán vị một mảng

>>>

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
2

Khi bạn tính toán chuyển vị của một mảng, các chỉ số hàng và cột của mọi phần tử được chuyển đổi. Ví dụ, mục

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
24 trở thành mục
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
25. Bạn cũng có thể sử dụng
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
26 làm bí danh cho
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
27

Khối mã sau hiển thị cách sắp xếp, nhưng bạn cũng sẽ thấy một kỹ thuật sắp xếp mạnh mẽ hơn trong phần sắp tới về dữ liệu có cấu trúc

>>>

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
3

Việc bỏ qua đối số

In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
2 sẽ tự động chọn kích thước cuối cùng và trong cùng, là các hàng trong ví dụ này. Sử dụng
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
29 làm phẳng mảng và thực hiện sắp xếp toàn cục. Nếu không, bạn có thể chỉ định trục nào bạn muốn. Ở đầu ra 5, mỗi cột của mảng vẫn có đầy đủ các phần tử của nó nhưng chúng đã được sắp xếp từ thấp đến cao bên trong cột đó

Cuối cùng, đây là một ví dụ về nối. Mặc dù có hàm

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
30, nhưng cũng có một số hàm trợ giúp đôi khi dễ đọc hơn

Dưới đây là một số ví dụ

>>>

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
4

Đầu vào 4 và 5 hiển thị các chức năng trực quan hơn một chút

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
31 và
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
32. Đầu vào 6 và 7 hiển thị
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
33 chung chung hơn, đầu tiên không có đối số
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
2 và sau đó với
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
35. Hành vi làm phẳng này có dạng tương tự như những gì bạn vừa thấy với
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
36

Một trở ngại quan trọng cần lưu ý là tất cả các hàm này lấy một bộ mảng làm đối số đầu tiên của chúng thay vì một số đối số thay đổi như bạn có thể mong đợi. Bạn có thể biết vì có thêm một cặp dấu ngoặc đơn

tổng hợp

Điểm dừng cuối cùng của bạn trong chuyến tham quan chức năng này trước khi đi sâu vào một số chủ đề và ví dụ nâng cao hơn là tổng hợp. Bạn đã thấy khá nhiều phương pháp tổng hợp, bao gồm

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
37,
In [1]: import numpy as np

In [2]: table = np.array([
   ...:     [5, 3, 7, 1],
   ...:     [2, 6, 7 ,9],
   ...:     [1, 1, 1, 1],
   ...:     [4, 3, 2, 0],
   ...: ])

In [3]: table.max()
Out[3]: 9

In [4]: table.max(axis=0)
Out[4]: array([5, 6, 7, 9])

In [5]: table.max(axis=1)
Out[5]: array([7, 9, 1, 4])
1,
 1>>> import numpy as np
 2>>> CURVE_CENTER = 80
 3>>> grades = np.array([72, 35, 64, 88, 51, 90, 74, 12])
 4>>> def curve(grades):
 5..     average = grades.mean()
 6..     change = CURVE_CENTER - average
 7..     new_grades = grades + change
 8..     return np.clip(new_grades, grades, 100)
 9...
10>>> curve(grades)
11array([ 91.25,  54.25,  83.25, 100.  ,  70.25, 100.  ,  93.25,  31.25])
6 và
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
40. Bạn có thể tham khảo thư viện hàm lớn hơn của NumPy để xem thêm. Nhiều hàm toán học, tài chính và thống kê sử dụng tính năng tổng hợp để giúp bạn giảm số lượng thứ nguyên trong dữ liệu của mình

Ví dụ thực tế 1. Triển khai Chuỗi Maclaurin

Bây giờ là lúc để xem trường hợp sử dụng thực tế cho các kỹ năng được giới thiệu trong các phần trên. thực hiện một phương trình

Một trong những điều khó khăn nhất khi chuyển đổi các phương trình toán học thành mã mà không có NumPy là thiếu nhiều điểm tương đồng về hình ảnh, điều này khiến bạn khó có thể biết được phần nào của phương trình mà bạn đang xem khi đọc mã. Các phép tính tổng được chuyển đổi thành các vòng lặp

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
9 dài dòng hơn và các tối ưu hóa giới hạn cuối cùng trông giống như các vòng lặp
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
42

Sử dụng NumPy cho phép bạn tiếp cận gần hơn với biểu diễn một đối một từ phương trình đến mã

Trong ví dụ tiếp theo này, bạn sẽ mã hóa chuỗi Maclaurin cho ex. Chuỗi Maclaurin là một cách tính gần đúng các hàm phức tạp hơn với một chuỗi vô hạn các số hạng tổng có tâm là 0

Ví dụ, chuỗi Maclaurin là tổng kết sau

Thư viện vật lý python

Bạn cộng các số hạng bắt đầu từ 0 và theo lý thuyết là vô cùng. Mỗi số hạng thứ n sẽ được x nâng lên thành n và chia cho n. , đó là ký hiệu cho hoạt động giai thừa

Bây giờ là lúc để bạn đưa mã đó vào mã NumPy. Tạo một tệp có tên là

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
43

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
5

Khi bạn chạy cái này, bạn sẽ thấy kết quả sau

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
6

Khi bạn tăng số lượng thuật ngữ, giá trị Maclaurin của bạn ngày càng gần với giá trị thực hơn và lỗi của bạn ngày càng nhỏ lại

Việc tính toán mỗi số hạng liên quan đến việc lấy

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
44 lũy thừa của
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
45 và chia cho
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
46, hoặc giai thừa của
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
45. Cộng, tổng và nâng lũy ​​thừa là tất cả các thao tác mà NumPy có thể vector hóa tự động và nhanh chóng, nhưng đối với
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
48 thì không như vậy

Để sử dụng

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
48 trong phép tính vector hóa, bạn phải sử dụng
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
50 để tạo phiên bản vector hóa. Tài liệu về
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
50 nói rằng nó không hơn gì một lớp vỏ bọc mỏng áp dụng vòng lặp
In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
9 cho một chức năng nhất định. Không có lợi ích hiệu suất thực sự nào khi sử dụng nó thay vì mã Python thông thường và có thể có một số hình phạt chung. Tuy nhiên, như bạn sẽ thấy trong giây lát, lợi ích về khả năng đọc là rất lớn

Khi giai thừa được véc tơ hóa của bạn được đặt đúng chỗ, mã thực tế để tính toán toàn bộ chuỗi Maclaurin ngắn một cách đáng kinh ngạc. Nó cũng có thể đọc được. Quan trọng nhất, nó gần như chính xác với phương trình toán học trông như thế nào

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
7

Đây là một ý tưởng quan trọng đến mức nó xứng đáng được nhắc lại. Ngoại trừ dòng bổ sung để khởi tạo

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
45, đoạn mã đọc gần như chính xác như phương trình toán học ban đầu. Không có vòng lặp
In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
9, không có biến tạm thời
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
55. Đơn giản, rõ ràng, toán học

Cứ như vậy, bạn đang sử dụng NumPy để lập trình toán học. Để thực hành thêm, hãy thử chọn một trong các chuỗi Maclaurin khác và triển khai nó theo cách tương tự

Loại bỏ các quảng cáo

Tối ưu hóa lưu trữ. Loại dữ liệu

Bây giờ bạn đã có thêm một chút kinh nghiệm thực tế, đã đến lúc quay lại lý thuyết và xem xét các loại dữ liệu. Các kiểu dữ liệu không đóng vai trò trung tâm trong nhiều mã Python. Các số hoạt động như chúng phải làm, các chuỗi làm những việc khác, Booleans là đúng hay sai và ngoài ra, bạn tạo các đối tượng và bộ sưu tập của riêng mình

Tuy nhiên, trong NumPy, có một chút chi tiết cần được đề cập. NumPy sử dụng mã C ẩn để tối ưu hóa hiệu suất và nó không thể làm điều đó trừ khi tất cả các mục trong một mảng có cùng loại. Điều đó không chỉ có nghĩa là cùng loại Python. Chúng phải cùng loại C cơ bản, có cùng hình dạng và kích thước theo bit

Các loại số. $ mkdir numpy-tutorial $ cd numpy-tutorial $ python3 -m venv .numpy-tutorial-venv $ source .numpy-tutorial-venv/bin/activate (.numpy-tutorial-venv) $ pip install numpy matplotlib Collecting numpy Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB) |████████████████████████████████| 15.3 MB 2.7 MB/s Collecting matplotlib Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB) |████████████████████████████████| 11.4 MB 16.8 MB/s ... 12, $ mkdir numpy-tutorial $ cd numpy-tutorial $ python3 -m venv .numpy-tutorial-venv $ source .numpy-tutorial-venv/bin/activate (.numpy-tutorial-venv) $ pip install numpy matplotlib Collecting numpy Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB) |████████████████████████████████| 15.3 MB 2.7 MB/s Collecting matplotlib Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB) |████████████████████████████████| 11.4 MB 16.8 MB/s ... 57, $ mkdir numpy-tutorial $ cd numpy-tutorial $ python3 -m venv .numpy-tutorial-venv $ source .numpy-tutorial-venv/bin/activate (.numpy-tutorial-venv) $ pip install numpy matplotlib Collecting numpy Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB) |████████████████████████████████| 15.3 MB 2.7 MB/s Collecting matplotlib Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB) |████████████████████████████████| 11.4 MB 16.8 MB/s ... 58 và $ mkdir numpy-tutorial $ cd numpy-tutorial $ python3 -m venv .numpy-tutorial-venv $ source .numpy-tutorial-venv/bin/activate (.numpy-tutorial-venv) $ pip install numpy matplotlib Collecting numpy Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB) |████████████████████████████████| 15.3 MB 2.7 MB/s Collecting matplotlib Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB) |████████████████████████████████| 11.4 MB 16.8 MB/s ... 59

Vì hầu hết khoa học dữ liệu và tính toán số của bạn sẽ có xu hướng liên quan đến các con số, nên chúng có vẻ là nơi tốt nhất để bắt đầu. Về cơ bản, có bốn loại số trong mã NumPy và mỗi loại có thể có một vài kích cỡ khác nhau

Bảng dưới đây phân tích chi tiết các loại này

Name# of BitsPython TypeNumPy TypeInteger64

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
12
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
61Booleans8
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
57
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
63Float64
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
58
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
65Complex128
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
59
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
67

Đây chỉ là những loại ánh xạ tới các loại Python hiện có. NumPy cũng có các loại cho các phiên bản có kích thước nhỏ hơn của từng loại, như số nguyên 8-, 16- và 32 bit, số dấu phẩy động có độ chính xác đơn 32 bit và số phức có độ chính xác đơn 64 bit. Tài liệu liệt kê toàn bộ chúng

Để chỉ định loại khi tạo mảng, bạn có thể cung cấp đối số

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07

>>>

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
8

NumPy tự động chuyển đổi loại độc lập với nền tảng của bạn

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
69 thành bất kỳ loại kích thước cố định nào mà nền tảng của bạn hỗ trợ cho kích thước đó. Trong trường hợp này, nó sử dụng
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
70. Nếu các giá trị được cung cấp của bạn không khớp với hình dạng của
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07 mà bạn đã cung cấp, thì NumPy sẽ sửa nó cho bạn hoặc đưa ra lỗi

Các loại chuỗi. Kích thước Unicode

Các chuỗi hoạt động hơi lạ trong mã NumPy vì NumPy cần biết có bao nhiêu byte để mong đợi, đây thường không phải là một yếu tố trong lập trình Python. May mắn thay, NumPy thực hiện khá tốt công việc xử lý các trường hợp ít phức tạp hơn cho bạn

>>>

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
9

Ở đầu vào 2, bạn cung cấp một loại

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07 của loại
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
73 tích hợp sẵn của Python, nhưng ở đầu ra 3, nó đã được chuyển đổi thành một chuỗi Unicode nhỏ có kích thước
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
74. Khi bạn kiểm tra kích thước của một mục nhất định trong đầu vào 4, bạn sẽ thấy rằng mỗi mục đó là
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
75 byte. ba ký tự Unicode 4 byte

Ghi chú. Khi xử lý các loại dữ liệu NumPy, bạn phải suy nghĩ về những thứ như độ bền của các giá trị của bạn. Trong trường hợp này,

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
77 có nghĩa là mỗi giá trị có kích thước bằng ba ký tự Unicode, với byte có ý nghĩa nhỏ nhất được lưu trữ trước trong bộ nhớ và byte có ý nghĩa lớn nhất được lưu trữ sau cùng. Một
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07 của
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
79 sẽ biểu thị điều ngược lại

Như một ví dụ, NumPy đại diện cho ký tự Unicode “🐍” với các byte

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
80 với một
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07 của
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
82 và
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
83 với một
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07 của
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
85. Hãy dùng thử bằng cách tạo một mảng đầy biểu tượng cảm xúc, đặt
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07 cho cái này hoặc cái kia, sau đó gọi
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
87 trên mảng của bạn

Nếu bạn muốn nghiên cứu về cách Python xử lý các giá trị 1 và 0 của các kiểu dữ liệu Python thông thường của bạn, thì tài liệu chính thức cho , một mô-đun thư viện chuẩn hoạt động với các byte thô, là một tài nguyên tốt khác

Khi bạn kết hợp mảng đó với một mảng có mục lớn hơn để tạo một mảng mới ở đầu vào 8, NumPy sẽ chỉ ra một cách hữu ích các mục của mảng mới cần phải lớn đến mức nào và tăng tất cả chúng lên kích thước

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
88

Nhưng đây là điều sẽ xảy ra khi bạn cố sửa đổi một trong các vị trí có giá trị lớn hơn dung lượng của

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07

>>>

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
0

Thay vào đó, nó không hoạt động như mong đợi và cắt bớt giá trị của bạn. Nếu bạn đã có một mảng, thì tính năng phát hiện kích thước tự động của NumPy sẽ không phù hợp với bạn. Bạn nhận được ba ký tự và thế là xong. Phần còn lại bị mất trong khoảng trống

Tất cả điều này để nói rằng, nói chung, NumPy hỗ trợ bạn khi bạn làm việc với các chuỗi, nhưng bạn phải luôn theo dõi kích thước của các phần tử của mình và đảm bảo rằng bạn có đủ không gian khi sửa đổi hoặc thay đổi các mảng tại chỗ

Loại bỏ các quảng cáo

Mảng có cấu trúc

Ban đầu, bạn đã học được rằng tất cả các phần tử mảng phải có cùng kiểu dữ liệu, nhưng điều đó không hoàn toàn đúng. NumPy có một loại mảng đặc biệt, được gọi là mảng bản ghi hoặc mảng có cấu trúc, mà bạn có thể chỉ định một loại và, tùy chọn, một tên trên cơ sở mỗi cột. Điều này làm cho việc sắp xếp và lọc trở nên mạnh mẽ hơn và có thể cảm thấy tương tự như khi làm việc với dữ liệu trong Excel, CSV hoặc cơ sở dữ liệu quan hệ

Đây là một ví dụ nhanh để thể hiện chúng một chút

>>>

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
1

Ở đầu vào 2, bạn tạo một mảng, ngoại trừ mỗi mục là một bộ có tên, tuổi và mức năng lượng. Đối với

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07, bạn thực sự cung cấp một danh sách các bộ dữ liệu với thông tin về từng trường.
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
91 là trường Unicode gồm 10 ký tự và cả
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
92 và
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
93 đều là số nguyên 4 byte hoặc 8 byte tiêu chuẩn

Ở đầu vào 3, bạn có thể thấy rằng các hàng, được gọi là bản ghi, vẫn có thể truy cập được bằng cách sử dụng chỉ mục

Ở đầu vào 4, bạn sẽ thấy một cú pháp mới để truy cập toàn bộ cột hoặc trường

Cuối cùng, ở đầu vào 5, bạn sẽ thấy sự kết hợp siêu mạnh mẽ giữa lọc dựa trên mặt nạ dựa trên trường và lựa chọn dựa trên trường. Lưu ý cách đọc truy vấn SQL sau đây không khác mấy

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
2

Trong cả hai trường hợp, kết quả là một danh sách các tên có cấp độ quyền lực vượt quá

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
94

Bạn thậm chí có thể thêm chức năng

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
95 bằng cách sử dụng
$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
96

>>>

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
3

Thao tác này sắp xếp dữ liệu theo

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
93 trước khi truy xuất dữ liệu, giúp hoàn thiện lựa chọn của bạn về các công cụ NumPy để chọn, lọc và sắp xếp các mục giống như bạn có thể làm trong SQL

Tìm hiểu thêm về các loại dữ liệu

Phần hướng dẫn này được thiết kế để giúp bạn có đủ kiến ​​thức để làm việc hiệu quả với các kiểu dữ liệu của NumPy, hiểu một chút về cách mọi thứ hoạt động bên trong và nhận ra một số cạm bẫy phổ biến. Nó chắc chắn không phải là một hướng dẫn đầy đủ. Có nhiều tài nguyên hơn

Ngoài ra còn có nhiều thông tin khác về các đối tượng

$ mkdir numpy-tutorial
$ cd numpy-tutorial
$ python3 -m venv .numpy-tutorial-venv
$ source .numpy-tutorial-venv/bin/activate

(.numpy-tutorial-venv)
$ pip install numpy matplotlib
Collecting numpy
  Downloading numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl (15.3 MB)
     |████████████████████████████████| 15.3 MB 2.7 MB/s
Collecting matplotlib
  Downloading matplotlib-3.3.0-1-cp38-cp38-macosx_10_9_x86_64.whl (11.4 MB)
     |████████████████████████████████| 11.4 MB 16.8 MB/s
...
07, bao gồm các cách khác nhau để xây dựng, tùy chỉnh và tối ưu hóa chúng cũng như cách làm cho chúng mạnh mẽ hơn cho mọi nhu cầu xử lý dữ liệu của bạn. Nếu bạn gặp sự cố và dữ liệu của bạn không tải vào các mảng chính xác như bạn mong đợi, thì đó là một nơi tốt để bắt đầu

Cuối cùng, NumPy

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
00 là một đối tượng mạnh mẽ theo đúng nghĩa của nó và bạn thực sự chỉ mới chạm vào bề nổi của các khả năng của bộ dữ liệu có cấu trúc. Nó chắc chắn đáng để đọc qua tài liệu
In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
00 cũng như tài liệu cho các lớp con mảng chuyên biệt khác mà NumPy cung cấp

nhìn về phía trước. Thư viện mạnh mẽ hơn

Trong phần tiếp theo này, bạn sẽ chuyển sang các công cụ mạnh mẽ được xây dựng dựa trên các khối xây dựng cơ bản mà bạn đã thấy ở trên. Dưới đây là một số thư viện mà bạn sẽ muốn xem qua khi thực hiện các bước tiếp theo trên con đường đạt đến sự thành thạo toàn diện về khoa học dữ liệu Python

gấu trúc

pandas là một thư viện lấy khái niệm về mảng có cấu trúc và xây dựng nó với rất nhiều phương thức tiện lợi, cải thiện trải nghiệm của nhà phát triển và tự động hóa tốt hơn. Về cơ bản, nếu bạn cần nhập dữ liệu từ mọi nơi, làm sạch, định hình lại, đánh bóng và sau đó xuất dữ liệu thành bất kỳ định dạng cơ bản nào, thì gấu trúc là thư viện dành cho bạn. Có khả năng là vào một thời điểm nào đó, bạn sẽ

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
02 cùng lúc với bạn
In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
03

Tài liệu về gấu trúc có một hướng dẫn nhanh với đầy các ví dụ cụ thể có tên là 10 phút với gấu trúc. Đó là một nguồn tài nguyên tuyệt vời mà bạn có thể sử dụng để thực hành nhanh chóng, thực hành

Loại bỏ các quảng cáo

scikit-học

Nếu mục tiêu của bạn thiên về hướng học máy, thì scikit-learning là bước tiếp theo. Cung cấp đủ dữ liệu, bạn có thể thực hiện, hồi quy, phân cụm, v.v. chỉ trong một vài dòng

Nếu bạn đã quen thuộc với toán học, thì tài liệu scikit-learning có một danh sách tuyệt vời giúp bạn bắt đầu và chạy Python. Nếu không, thì Lộ trình học Toán cho Khoa học dữ liệu là một nơi tốt để bắt đầu. Ngoài ra, còn có toàn bộ lộ trình học tập dành cho máy học

Điều quan trọng là bạn phải hiểu ít nhất những điều cơ bản về toán học đằng sau các thuật toán thay vì chỉ nhập chúng và chạy với nó. Xu hướng trong các mô hình học máy là một vấn đề lớn về đạo đức, xã hội và chính trị

Ném dữ liệu vào các mô hình mà không xem xét cách giải quyết sự thiên vị là một cách tuyệt vời để gây rắc rối và tác động tiêu cực đến cuộc sống của mọi người. Thực hiện một số nghiên cứu và học cách dự đoán nơi có thể xảy ra sự thiên vị là một khởi đầu tốt để đi đúng hướng

Matplotlib

Bất kể bạn đang làm gì với dữ liệu của mình, đến một lúc nào đó, bạn sẽ cần truyền đạt kết quả của mình cho người khác và Matplotlib là một trong những thư viện chính để biến điều đó thành hiện thực. Để biết phần giới thiệu, hãy xem Vẽ sơ đồ với Matplotlib. Trong phần tiếp theo, bạn sẽ thực hành một số thao tác thực hành với Matplotlib, nhưng bạn sẽ sử dụng nó để xử lý hình ảnh hơn là để tạo biểu đồ

Ví dụ thực tế 2. Thao tác hình ảnh với Matplotlib

Nó luôn gọn gàng khi bạn đang làm việc với một thư viện Python và nó đưa cho bạn thứ gì đó hóa ra là một mảng NumPy cơ bản. Trong ví dụ này, bạn sẽ trải nghiệm điều đó trong tất cả vinh quang của nó

Bạn sẽ tải một hình ảnh bằng Matplotlib, nhận ra rằng các hình ảnh RGB thực sự chỉ là các mảng

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
04 của
In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
05 số nguyên, thao tác các byte đó và sử dụng lại Matplotlib để lưu hình ảnh đã sửa đổi đó sau khi bạn hoàn tất

Tải xuống hình ảnh này để làm việc với

Thư viện vật lý python
Hình ảnh. Ilona Ilyés

Đó là hình ảnh một chú mèo con đáng yêu có kích thước 1920 pixel x 1299 pixel. Bạn sẽ thay đổi màu sắc của những điểm ảnh đó

Tạo một tệp Python có tên là

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
06, sau đó thiết lập quá trình nhập của bạn và tải hình ảnh

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
4

Đây là một khởi đầu tốt. Matplotlib có mô-đun riêng để xử lý hình ảnh và bạn sẽ dựa vào đó vì nó giúp dễ dàng đọc và ghi các định dạng hình ảnh

Nếu bạn chạy mã này, thì bạn của bạn, mảng NumPy sẽ xuất hiện ở đầu ra

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
5

Đó là hình ảnh có chiều cao 1299 pixel, chiều rộng 1920 pixel và ba kênh. mỗi cái cho các mức màu đỏ, lục và lam (RGB)

Bạn muốn xem điều gì xảy ra khi bạn bỏ kênh R và G?

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
6

Chạy lại và kiểm tra thư mục. Nên có một hình ảnh mới

Thư viện vật lý python

Is your mind blown yet? Do you feel the power? Images are just fancy arrays. Pixel chỉ là những con số

But now, it’s time to do something a little more useful. Bạn sẽ chuyển đổi hình ảnh này sang thang độ xám. Tuy nhiên, chuyển đổi sang thang độ xám phức tạp hơn. Averaging the R, G, and B channels and making them all the same will give you an image that’s grayscale. Nhưng bộ não con người thật kỳ lạ và sự chuyển đổi đó dường như không xử lý đúng độ sáng của màu sắc

Trên thực tế, tốt hơn là bạn nên tự mình xem. Bạn có thể sử dụng thực tế là nếu bạn xuất một mảng chỉ có một kênh thay vì ba kênh, thì bạn có thể chỉ định một bản đồ màu, được gọi là

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
07 trong thế giới Matplotlib. Nếu bạn chỉ định một
In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
07, thì Matplotlib sẽ xử lý các phép tính độ dốc tuyến tính cho bạn

Loại bỏ ba dòng cuối cùng trong tập lệnh của bạn và thay thế chúng bằng dòng này

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
7

These new lines create a new array called

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
09, which is a copy of the
In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
10 array that you’ve flattened along axis 2 by taking the average of all three channels. You’ve averaged all three channels and outputted something with R, G, and B values equal to that average. Khi R, G và B đều giống nhau, màu kết quả nằm trên thang độ xám

Những gì nó mang lại không phải là khủng khiếp

Thư viện vật lý python

But you can do better using the luminosity method. This technique does a weighted average of the three channels, with the mindset that the color green drives how bright an image appears to be, and blue can make it appear darker. Bạn sẽ sử dụng toán tử

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
11, là toán tử của NumPy để thực hiện tích mảng hai chiều truyền thống.

Replace those last two lines in your script again

In [1]: import numpy as np

In [2]: digits = np.array([
   ...:     [1, 2, 3],
   ...:     [4, 5, 6],
   ...:     [6, 7, 9],
   ...: ])

In [3]: digits
Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [6, 7, 9]])
8

Lần này, thay vì tính trung bình cố định, bạn đang hoàn thành tích vô hướng, đây là một loại kết hợp có trọng số của ba giá trị. Since the weights add up to one, it’s exactly equivalent to doing a weighted average of the three color channels

Here’s the result

Thư viện vật lý python

The first image is a bit darker, and the edges and shadows are bolder. The second image is lighter and brighter, and the dark lines aren’t quite as bold. There you have it—you used Matplotlib and NumPy arrays to manipulate an image

Loại bỏ các quảng cáo

Conclusion

No matter how many dimensions your data lives in, NumPy gives you the tools to work with it. You can store it, reshape it, combine it, filter it, and sort it, and your code will read like you’re operating on only one number at a time rather than hundreds or thousands

In this tutorial, you learned

  • The core concepts of data science made possible by NumPy
  • Cách tạo mảng NumPy bằng nhiều phương thức khác nhau
  • Cách thao tác mảng NumPy để thực hiện các phép tính hữu ích
  • Cách áp dụng những kỹ năng mới này vào các vấn đề trong thế giới thực

Don’t forget to check out the repository of NumPy code samples from throughout this tutorial. You can use it for reference and experiment with the examples to see how changing the code changes the outcome

Nhận mã mẫu. Nhấp vào đây để lấy mã mẫu mà bạn sẽ sử dụng để tìm hiểu về NumPy trong hướng dẫn này

Now you’re ready for the next steps in your data science journey. Whether you’re cleaning data, training neural networks, communicating using powerful plots, or aggregating data from the Internet of Things, these activities all start from the same place. the humble NumPy array

Mark as Completed

🐍 Python Tricks 💌

Get a short & sweet Python Trick delivered to your inbox every couple of days. No spam ever. Unsubscribe any time. Curated by the Real Python team

Thư viện vật lý python

Send Me Python Tricks »

About Ryan Palo

Thư viện vật lý python
Thư viện vật lý python

Ryan is an author for Real Python, technical editor for books on Python, Hugo, and the command line, and a mold tooling designer. He loves Python, Ruby, Bash, and Rust. Also, physics, calculus, woodworking, and ukuleles. Looking for work

» More about Ryan


Each tutorial at Real Python is created by a team of developers so that it meets our high quality standards. The team members who worked on this tutorial are

Thư viện vật lý python

Aldren

Thư viện vật lý python

Bartosz

Thư viện vật lý python

Geir Arne

Thư viện vật lý python

Joanna

Thư viện vật lý python

Gia-cốp

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi