Tin tức và phân tích của tất cả các thiết bị di động

Cách tạo mảng các số cách đều nhau

Hướng dẫn này sẽ hướng dẫn bạn cách sử dụng NumPy linspace() để tạo một mảng các số cách đều nhau trong Python.

Bạn sẽ tìm hiểu cú pháp NumPy linspace(), sau đó là các ví dụ để giúp bạn hiểu cách sử dụng nó.

Lưu ý: Bạn phải cài đặt Python và NumPy để làm theo hướng dẫn này.

Bạn chưa có NumPy? Chúng tôi đã chuẩn bị một hướng dẫn cài đặt ngắn cho bạn.

Hãy bắt đầu!

Cài đặt và nhập NumPy

Trước khi bắt đầu hướng dẫn, hãy nhanh chóng thực hiện các bước để cài đặt thư viện NumPy.

⏩ Nếu bạn đã cài đặt NumPy, bạn có thể chuyển sang phần tiếp theo.

  • Nếu bạn sử dụng Google Colab, môi trường sổ ghi chép Jupyter dựa trên đám mây, thì bạn có thể nhập NumPy và bắt đầu viết mã ngay lập tức. (được đề xuất trong hướng dẫn này ✅)
  • Nếu bạn muốn thiết lập môi trường làm việc cục bộ, tôi khuyên bạn nên cài đặt bản phân phối Anaconda Python. Anaconda đi kèm với một số gói hữu ích được cài đặt sẵn. Bạn có thể tải xuống trình cài đặt cho hệ điều hành của mình. Quá trình cài đặt chỉ mất vài phút.⌛
  • Nếu bạn đã cài đặt Python trên máy tính của mình, bạn vẫn có thể cài đặt Anaconda. Bạn có thể sử dụng conda hoặc pip để cài đặt và quản lý các gói. Bạn có thể chạy một trong các lệnh sau từ Dấu nhắc lệnh Anaconda để cài đặt NumPy.
# Install NumPy using conda
conda install numpy

# Install NumPy using pip
pip install numpy

Trong bước tiếp theo, hãy nhập numpy dưới bí danh np bằng cách chạy lệnh sau. Điều này sẽ giúp bạn gọi NumPy là np – mà không phải gõ numpy mỗi khi bạn truy cập một mục trong mô-đun.

import numpy as np

Trong tương lai, chúng ta sẽ sử dụng ký hiệu dấu chấm để truy cập tất cả các chức năng trong thư viện NumPy như sau: ví dụ:

Trường hợp các số cách đều nhau

Khi làm việc với mảng NumPy, có những lúc bạn cần tạo một mảng gồm các số cách đều nhau trong một khoảng.

Trước khi tiếp tục, hãy nhanh chóng xem xét một chức năng tương tự khác, ví dụ: arange().

NumPy linspace() vs. Sắp xếp NumPy()

Nếu bạn đã từng sử dụng NumPy, thì có lẽ bạn đã sử dụng np.arange() để tạo một mảng số trong một phạm vi nhất định.

Bạn biết rằng np.arange(start, stop, step) trả về một mảng số từ đầu đến, nhưng không dừng, theo từng bước; kích thước bước mặc định là 1.

Tuy nhiên, giá trị bước không phải lúc nào cũng rõ ràng. Hãy xem tại sao lại như vậy.

Ví dụ, nếu bạn cần 4 các số cách đều nhau từ 0 xuống 1bạn biết kích thước bước phải là 0.25. Nhưng nếu bạn sử dụng np.arange() thì nó không chứa giá trị dừng bằng 1. Vì vậy, bạn sẽ phải chọn một khoảng vượt ra ngoài giá trị dừng.

Hình ảnh bên dưới minh họa thêm một vài ví dụ mà bạn cần một số điểm nhất định cách đều nhau trong một khoảng thời gian [a, b].

Các điểm cách đều nhau trong khoảng

Ví dụ đầu tiên của chúng tôi 4 điểm cách đều nhau [0,1] nó khá dễ dàng. Bạn biết rằng kích thước bước giữa các điểm phải là 0.25.

Giả sử bạn có một ví dụ phức tạp hơn một chút – nơi bạn phải thay thế 7 các điểm cách đều nhau từ 1 đến 33. Trong trường hợp này, kích thước bước có thể không rõ ràng ngay lập tức. Tuy nhiên, bạn có thể tự tính toán giá trị bước trong trường hợp này.

Tuy nhiên, np.linspace() ở đây để làm cho nó dễ dàng hơn!

Sử dụng không gian tuyến tính của NumPy

Ví dụ: sử dụng linspace(), bạn chỉ cần chỉ định số điểm trong khoảng thời gian – mà không phải lo lắng về kích thước bước. Và bạn sẽ nhận lại bảng như yêu cầu.

Với động lực đó, chúng ta hãy chuyển sang tìm hiểu cú pháp NumPy linspace() trong phần tiếp theo.

Cú pháp NumPy linspace()

Cú pháp sử dụng NumPy linspace() được hiển thị bên dưới:

np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

Lúc đầu, cú pháp trên có vẻ rất phức tạp với nhiều tham số.

Tuy nhiên, hầu hết chúng là các tham số tùy chọn và có thể nhận được cú pháp đơn giản hơn nhiều chỉ trong vài phút.

Bây giờ hãy bắt đầu bằng cách kiểm tra cú pháp trên:

  • bắt đầu và kết thúc tương ứng là bắt đầu và kết thúc của khoảng thời gian. Cả start và stop đều có thể là vô hướng hoặc mảng. Đối với hướng dẫn này, chúng tôi sẽ giới hạn bản thân với các giá trị bắt đầu và kết thúc vô hướng.
  • số là số điểm cách đều nhau. Đây là một tham số tùy chọn với giá trị mặc định là 50.
  • điểm cuối cũng là một tham số tùy chọn có thể là Đúng hoặc Sai.
  • Giá trị mặc định là True, có nghĩa là điểm cuối sẽ được bao gồm trong phạm vi theo mặc định. Tuy nhiên, bạn có thể đặt thành Sai để loại trừ điểm cuối.
  • bước lùi là một tham số tùy chọn khác có giá trị Đúng hoặc Sai. Khi được đặt thành True, giá trị bước được trả về.
  • dtype là kiểu dữ liệu của các số trong mảng. Loại thường được suy ra là float và không cần chỉ định rõ ràng.
  • axis là một tham số tùy chọn khác biểu thị trục dọc theo đó các số sẽ được lưu trữ. Và nó chỉ quan trọng nếu bản thân các giá trị bắt đầu và kết thúc là các mảng.

▶️ Vậy np.linspace() trả về cái gì?

Trả về một mảng N chiều các số cách đều nhau. Và nếu tham số retstep được đặt thành True, nó cũng trả về kích thước bước.

Dựa trên các cuộc thảo luận cho đến nay, đây là một cú pháp đơn giản hóa để sử dụng, ví dụ: linspace():

np.linspace(start, stop, num)

Dòng mã trên sẽ trả về một mảng num các số cách đều nhau trong một khoảng [start, stop].

Bây giờ bạn đã biết cú pháp, hãy bắt đầu mã hóa các ví dụ.

Cách tạo các mảng cách đều nhau với NumPy linspace()

#1. Như ví dụ đầu tiên của chúng tôi, hãy tạo một mảng gồm 20 số cách đều nhau trong một khoảng [1, 5].

Các giá trị bắt đầu, dừng và num có thể được chỉ định làm đối số từ khóa. Điều này được hiển thị trong ô mã bên dưới:

import numpy as np
arr1 = np.linspace(start = 1,stop = 5,num = 20)
print(arr1)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

Lưu ý rằng các số trong mảng bắt đầu bằng 1 và kết thúc với 5 – bao gồm cả hai điểm cuối. Cũng lưu ý cách các con số, bao gồm cả các điểm 1 và 5được biểu diễn dưới dạng float trong mảng được trả về.

#2. Ví dụ trước đã chuyển start, stop và num làm đối số từ khóa. Nếu bạn chuyển các đối số theo đúng thứ tự, bạn cũng có thể sử dụng chúng làm đối số vị trí chỉ có các giá trị, như minh họa bên dưới.

import numpy as np
arr2 = np.linspace(1,5,20)
print(arr2)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

#3. Bây giờ, hãy tạo một mảng khác trong đó chúng tôi đặt bước lùi thành True.

Điều này có nghĩa là bây giờ hàm sẽ trả về cả một mảng và một bước. Và chúng ta có thể giải nén chúng thành hai biến arr3: một mảng và step_size: kích thước bước được trả về.

Ô mã bên dưới giải thích cách thực hiện việc này.

import numpy as np
arr3, step_size = np.linspace(1,5,20,retstep = True)
print(arr3)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

# Output:
print(step_size)
0.21052631578947367

#4. Ví dụ cuối cùng, hãy đặt điểm cuối thành Sai và xem điều gì sẽ xảy ra.

import numpy as np
arr4 = np.linspace(1,5,20,endpoint = False)
print(arr4)

# Output:
[1.  1.2 1.4 1.6 1.8 2.  2.2 2.4 2.6 2.8 3.  3.2 3.4 3.6 3.8 
4.  4.2 4.4 4.6 4.8]

Trong mảng được trả về, bạn có thể thấy rằng 1 được bao gồm trong khi 5 Không bao gồm. Và giá trị cuối cùng trong mảng là 4,8nhưng chúng tôi vẫn có 20 số.

Cho đến nay, chúng tôi chỉ tạo ra các mảng các số cách đều nhau. Trong phần tiếp theo, hãy hình dung bằng cách vẽ những con số này.

Làm thế nào để vẽ các số cách đều nhau trong một khoảng thời gian?

Trong phần này, hãy chọn [10,15] như một lĩnh vực quan tâm. Sau đó, sử dụng np.linspace() để tạo hai mảng, mỗi mảng tương ứng 8 và 12 điểm.

Sau khi hoàn tất, chúng ta có thể sử dụng chức năng vẽ đồ thị của matplotlib để vẽ chúng.

Để rõ ràng, chúng ta sẽ nối hai mảng N1 = 8 và N2 = 12 điểm cách đều nhau tại các vị trí khác nhau dọc theo trục y.

Đoạn mã dưới đây chứng minh điều này.

import numpy as np
import matplotlib.pyplot as plt

N1 = 8
N2 = 12

a = 10
b = 15

y1 = np.zeros(N1)
y2 = np.zeros(N2)

x1 = np.linspace(a, b, N1)
x2 = np.linspace(a, b, N2)

plt.plot(x1, y1-0.5, 'o')
plt.plot(x2, y2 + 0.5, 'o')

plt.ylim([-1, 1])

plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]')
plt.xlabel('Interval')

plt.show()

Tạo các điểm cách đều nhau có thể hữu ích khi làm việc với các hàm toán học. Chúng ta sẽ tìm hiểu về điều này trong phần tiếp theo.

Làm cách nào để sử dụng NumPy linspace() với các hàm toán học?

Khi bạn đã tạo một mảng các số cách đều nhau với np.linspace(), bạn có thể tính giá trị của các hàm toán học trong một khoảng.

Trong ô mã bên dưới, trước tiên bạn tạo 50 điểm cách đều nhau trong phạm vi từ 0 đến 2π. Và sau đó tạo mảng y với np.sin() trên mảng x. Lưu ý rằng bạn có thể bỏ qua tham số num vì giá trị mặc định là 50. Chúng tôi vẫn sẽ sử dụng nó một cách rõ ràng.

Trong bước tiếp theo, bạn có thể vẽ đồ thị hàm sin trên khoảng [0, 2π]. Để làm điều này, bạn có thể sử dụng matplotlib như trong ví dụ trước. Đặc biệt, hàm plot() trong matplotlib.pytplot được sử dụng để tạo biểu đồ đường.

import numpy as np
import matplotlib.pyplot as plt

N = 50

a = 0.0
b = 2*np.pi

x = np.linspace(a, b, N)
y = np.sin(x)

plt.plot(x, y, marker = "o")

plt.ylim([-1, 1])
plt.title(f'y = sin(x)')
plt.xlabel('x ---->')

plt.show()

Bây giờ hãy chạy đoạn mã trên bằng cách đặt N thành 10. Bạn sẽ nhận được một biểu đồ như trong hình bên dưới.

Và bạn có thể thấy rằng đồ thị không trơn tru lắm vì bạn chỉ chọn 10 điểm trong phạm vi.

Nói chung, số điểm xét càng lớn thì đồ thị của hàm càng mượt.

Đăng kí

Dưới đây là tóm tắt những gì chúng tôi đã học được.

  • np.linspace(start, stop, num) trả về một mảng num các số cách đều nhau trong một khoảng [start, stop].
  • Đặt điểm cuối tham số tùy chọn thành Sai để loại trừ điểm dừng và đặt khoảng thời gian thành[startstop)[startstop)[startstop)[startstop)
  • Đặt retstep thành True tùy chọn để nhận kích thước bước.
  • Tạo các mảng cách đều nhau với np.linspace() và sau đó sử dụng mảng với các hàm toán học.

Tôi hy vọng bây giờ bạn đã hiểu cách thức hoạt động của np.linspace(). Bạn có thể chạy các ví dụ trên trong sổ ghi chép Jupyter. Hãy xem hướng dẫn của chúng tôi về Jupyter Notebook hoặc các lựa chọn thay thế Jupyter khác mà bạn có thể cân nhắc.

Hẹn gặp lại bạn trong bài hướng dẫn Python tiếp theo. Cho đến lúc đó, hãy tiếp tục viết mã!😀