Python nối thêm danh sách nhanh như thế nào?

Gần đây tôi đang làm việc trong một dự án xử lý ảnh kỹ thuật số. Điều chỉnh siêu tham số mất khá nhiều thời gian trước khi tôi có được độ chính xác mong muốn. Tất cả chỉ vì ký sinh trùng quá mức và phần cứng cấp thấp vô dụng của tôi

Đối với mỗi lần thực hiện, máy của tôi mất khoảng 15–20 phút. 20 phút để xử lý 20 000 mục nhập. Tôi tưởng tượng nếu tôi đang làm việc trên bộ dữ liệu 1 triệu bản ghi, tôi sẽ phải đợi trái đất quay hoàn toàn trước khi kết thúc khóa đào tạo

Tôi hài lòng với độ chính xác của mô hình. Tuy nhiên, tôi muốn thử nhiều kiến ​​trúc Mạng thần kinh chuyển đổi [CNN] khác trước khi gửi mã của mình. Do đó, tôi quyết định tìm kiếm các phòng tối ưu hóa trong mã của mình

Bởi vì tôi đang sử dụng các thuật toán máy học dựng sẵn nằm trong PyPi — Scikit-Learn và Tensorflow — rất ít chương trình con còn lại để tối ưu hóa. Một tùy chọn là tăng mã của tôi về cấu trúc dữ liệu. Tôi đang lưu trữ dữ liệu trong danh sách và vì NumPy siêu nhanh nên tôi nghĩ sử dụng nó có thể là một lựa chọn khả thi

Đoán xem điều gì đã xảy ra sau khi chuyển đổi mã danh sách của tôi thành mã mảng NumPy?

Tôi rất ngạc nhiên, thời gian thực hiện không giảm. Thay vào đó nó tăng vọt

Điều đó đang được nói, trong bài đăng này, tôi sẽ hướng dẫn bạn tình huống chính xác mà các danh sách kết thúc hoạt động tốt hơn các mảng NumPy

NumPy và Danh sách

Hãy để chúng tôi thảo luận về sự khác biệt giữa mảng và danh sách NumPy, để bắt đầu với

NumPy là thư viện Python thực tế cho thao tác mảng N chiều và tính toán tính toán. Nó là mã nguồn mở, dễ sử dụng, thân thiện với bộ nhớ và nhanh như chớp

Ban đầu được gọi là 'Numeric', NumPy đặt khuôn khổ cho nhiều thư viện khoa học dữ liệu như SciPy, Scikit-Learn, Panda, v.v.

Trong khi danh sách Python lưu trữ một tập hợp các đối tượng dữ liệu có thể thay đổi, có thứ tự, thì mảng NumPy chỉ lưu trữ một loại đối tượng duy nhất. Vì vậy, chúng ta có thể nói rằng các mảng NumPy sống dưới ô của danh sách. Do đó, không có gì mảng NumPy làm danh sách không

Tuy nhiên, khi nói đến NumPy nói chung. Numpy không chỉ bao gồm thao tác mảng mà còn nhiều thói quen khác như phép toán nhị phân, đại số tuyến tính, hàm toán học, v.v. Tôi tin rằng nó bao gồm nhiều hơn một người có thể cần

Điều tiếp theo cần xem xét là tại sao chúng ta thường sử dụng mảng NumPy trên danh sách

Câu trả lời ngắn gọn, mà tôi tin rằng mọi người đọc bài viết này đều biết, là. nó nhanh hơn

NumPy thực sự rất nhanh, mặc dù Python được biết đến là chậm. Điều này là do NumPy đóng vai trò là trình bao bọc xung quanh C và Fortran. Và khỏi phải nói hai em này nhanh như thế nào

Mảng NumPy nhanh hơn danh sách

Trước khi chúng tôi thảo luận về trường hợp mảng NumPy trở nên chậm như ốc sên, cần xác minh giả định rằng mảng NumPy thường nhanh hơn danh sách

Để làm điều đó, chúng tôi sẽ tính giá trị trung bình của mảng 1 triệu phần tử bằng cả NumPy và danh sách. Mảng được tạo ngẫu nhiên

Đoạn mã sau là một ví dụ

"""General comparison between NumPy and lists"""import numpy as np
from time import time
#Random numpy array
numpy_array = np.random.rand[1000000]
list_conv = list[numpy_array]
#Start timing NumPy compuation
start1 = time[]
#Compute the mean using NumPy
numpy_mean = np.mean[numpy_array]
print[f"Computing the mean using NumPy: {numpy_mean}"]
#End timing
end1 = time[]
#Time taken
time1 = end1 - start1
print[f"Computation time: {time1}"]
#Start timing list computation
start2 = time[]
#Compute the mean using lists
list_mean = np.mean[list_conv]
print[f"Computing the mean using lists: {list_mean}"]
#End timing
end2 = time[]
#Time taken
time2 = end2 - start2
print[f"Computation time: {time2}"]
#Check results are equal
assert abs[numpy_mean - list_mean]

Chủ Đề