Hướng dẫn python slow for loop - python chậm vòng lặp

Bạn có nghĩ Python chậm không? Đây là một cách nhanh chóng để lặp trong Python

Hình ảnh qua Shutterstock theo giấy phép cho Frank Andrade

Python được biết đến là ngôn ngữ lập trình chậm. Mặc dù nó là một thực tế là Python chậm hơn các ngôn ngữ khác, nhưng có một số cách để tăng tốc mã Python của chúng tôi.

Làm sao? Đơn giản, tối ưu hóa mã của bạn.

Nếu chúng ta viết mã tiêu thụ ít bộ nhớ và lưu trữ, không chỉ chúng ta sẽ hoàn thành công việc mà còn làm cho mã Python của chúng ta chạy nhanh hơn.

Here’s a fast and also a super-fast way to loop in Python that I learned in one of the Python courses I took (we never stop learning!).

The average loop

Say we want to sum the numbers from 1 to 100000000 (we might never do that but that big number will help me make my point).

Một cách tiếp cận điển hình sẽ là tạo ra một biến

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
8, lặp qua một phạm vi và tăng giá trị của
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
9 bằng
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
0 trên mỗi lần lặp.

This gets the job done, but it takes around 6.58seconds.seconds.

Although that doesn’t look so slow now, it’ll get slower as you add more 0's to the number inside the range.

Let’s speed this up!

A faster way to loop using built-in functions

A faster way to loop in Python is using built-in functions.

In our example, we could replace the for loop with the

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
1 function. This function will sum the values inside the range of numbers.

The code above takes 0.84 seconds. That’s way faster than the previous loop we used! This is why we should choose built-in functions over loops.

But there’s still room for improvement.

A super-fast way to loop using Numpy

Một vài tuần trước, trong một khóa học khoa học dữ liệu tôi đã tham gia, tôi đã học được rằng một trong những thực tiễn kỹ thuật phần mềm mà tôi nên làm theo để trở thành một nhà khoa học dữ liệu tốt hơn đang tối ưu hóa mã của tôi.

We can optimize loops by vectorizing operations. Đây là một/hai bậc có độ lớn nhanh hơn so với tương đương Python thuần túy của chúng (đặc biệt là trong các tính toán số).

Vectorization là một cái gì đó chúng ta có thể nhận được với Numpy. Numpy là một thư viện với các cấu trúc dữ liệu hiệu quả được thiết kế để giữ dữ liệu ma trận. Nó được viết chủ yếu bằng C, vì vậy tốc độ là thứ bạn có thể tin tưởng.

Hãy thử sử dụng các phương thức numpy

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
2 và
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
3 thay vì các hàm Python.

Điều này nhận được công việc được thực hiện trong 0,22 giây. Đây là cách nhanh hơn các phương pháp trước đây.

Đây là lý do tại sao bạn nên sử dụng các hoạt động vector qua các vòng lặp bất cứ khi nào có thể.

Đặt vòng lặp và numpy vào thử nghiệm với nhiều tính toán hơn

Cho đến nay, chúng tôi đã thấy một ứng dụng đơn giản của Numpy, nhưng nếu chúng ta không chỉ có một vòng lặp, mà là một điều kiện nếu điều kiện và nhiều tính toán hơn để làm?

Ở đây, khi Numpy rõ ràng vượt trội hơn các vòng lặp.

Hãy tưởng tượng chúng tôi có một loạt các điểm thi ngẫu nhiên (từ 1 đến 100) và chúng tôi muốn có được điểm trung bình của những người thất bại trong kỳ thi (điểm số

Ở đây, cách thức chúng tôi làm điều này với một vòng lặp.

Mất khoảng 15,7 giây. Không tệ, nhưng chúng ta có thể nhận được kết quả nhanh hơn với Numpy.

Ở đây, cách thức chúng tôi làm điều này với Numpy.

Mã trên mất khoảng 0,78 giây. Đó là cách nhanh hơn và mã là đơn giản!

Sau đây là những hướng dẫn sơ bộ và dự đoán được giáo dục dựa trên kinh nghiệm. Bạn nên

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
2 hoặc hồ sơ trường hợp sử dụng cụ thể của bạn để có được số cứng và những con số đó đôi khi có thể không đồng ý với số dưới đây.

Nội dung chính

  • Giảm nhanh hơn so với Loop Python?
  • Tôi có thể sử dụng gì thay vì một vòng lặp trong Python?
  • Vòng lặp nào nhanh hơn so với vòng lặp?
  • Bản đồ có nhanh hơn so với Loop Python không?

Bản đồ () hoạt động nhanh hơn so với vòng lặp.Xem xét cùng một mã ở trên khi chạy trong IDE này.Sử dụng bản đồ ():. Considering the same code above when run in this ide. Using map():

Sau đây là những hướng dẫn sơ bộ và dự đoán được giáo dục dựa trên kinh nghiệm. Bạn nên

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
2 hoặc hồ sơ trường hợp sử dụng cụ thể của bạn để có được số cứng và những con số đó đôi khi có thể không đồng ý với số dưới đây.

Đối với các chức năng xử lý danh sách chức năng: Mặc dù chúng được viết bằng C và có thể vượt trội so với các hàm tương đương được viết bằng Python, nhưng chúng không nhất thiết là tùy chọn nhanh nhất. Một số tốc độ lên được mong đợi nếu chức năng được viết bằng C quá. Nhưng hầu hết các trường hợp sử dụng

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
5 (hoặc chức năng Python khác), chi phí của việc thiết lập các khung ngăn xếp Python liên tục, v.v. ăn bất kỳ khoản tiết kiệm nào. Chỉ cần thực hiện cùng một công việc nội tuyến, không có các cuộc gọi chức năng (ví dụ: khả năng hiểu danh sách thay vì
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
6 hoặc
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
7) thường nhanh hơn một chút.if the function is written in C too. But most cases using a
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
5 (or other Python function), the overhead of repeatedly setting up Python stack frames etc. eats up any savings. Simply doing the same work in-line, without function calls (e.g. a list comprehension instead of
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
6 or
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
7) is often slightly faster.if the function is written in C too. But most cases using a
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
5 (or other Python function), the overhead of repeatedly setting up Python stack frames etc. eats up any savings. Simply doing the same work in-line, without function calls (e.g. a list comprehension instead of
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
6 or
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
7) is often slightly faster.

Giả sử rằng trong một trò chơi mà tôi đang phát triển, tôi cần vẽ các bản đồ phức tạp và lớn bằng cách sử dụng cho các vòng lặp. Câu hỏi này chắc chắn sẽ có liên quan, vì nếu một sự hiểu biết danh sách, chẳng hạn, thực sự nhanh hơn, nó sẽ là một lựa chọn tốt hơn nhiều để tránh độ trễ (mặc dù độ phức tạp thị giác của mã).

Rất có thể, nếu mã như thế này chưa đủ nhanh khi được viết bằng python không "không tối ưu" tốt, thì không có số lượng tối ưu hóa vi mô cấp độ trăn sẽ làm cho nó đủ nhanh và bạn nên bắt đầu nghĩ về việc giảm xuống C. Tối ưu hóa vi mô thường có thể tăng tốc mã Python một cách đáng kể, có giới hạn thấp (về mặt tuyệt đối) đối với việc này. Hơn nữa, ngay cả trước khi bạn đạt được trần đó, nó sẽ trở nên hiệu quả hơn về chi phí (tăng tốc 15% so với 300% tăng tốc với cùng một nỗ lực) để cắn viên đạn và viết một số C. C.

Đã trả lời ngày 1 tháng 3 năm 2014 lúc 0:56Mar 1, 2014 at 0:56Mar 1, 2014 at 0:56

1

Nếu bạn kiểm tra thông tin trên python.org, bạn có thể thấy bản tóm tắt này:

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54

Nhưng bạn thực sự nên đọc bài viết trên chi tiết để hiểu nguyên nhân của sự khác biệt hiệu suất.should read the above article in details to understand the cause of the performance difference.should read the above article in details to understand the cause of the performance difference.

Tôi cũng đề nghị bạn nên thời gian mã của bạn bằng cách sử dụng thời gian. Vào cuối ngày, có thể có một tình huống, ví dụ, bạn có thể cần phải thoát khỏi vòng lặp

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
3 khi một điều kiện được đáp ứng. Nó có khả năng có thể nhanh hơn so với việc tìm ra kết quả bằng cách gọi
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
6.

Đã trả lời ngày 1 tháng 3 năm 2014 lúc 0:44Mar 1, 2014 at 0:44Mar 1, 2014 at 0:44

Anthony Konganthony KongAnthony KongAnthony Kong

34,9K39 Huy hiệu vàng157 Huy hiệu bạc286 Huy hiệu Đồng39 gold badges157 silver badges286 bronze badges39 gold badges157 silver badges286 bronze badges

4

Bạn hỏi cụ thể về

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
30,
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
31 và
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
32, nhưng tôi cho rằng bạn muốn biết về lập trình chức năng nói chung. Đã tự mình kiểm tra vấn đề tính toán khoảng cách giữa tất cả các điểm trong một tập hợp các điểm, lập trình chức năng (sử dụng hàm
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
33 từ mô-đun
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
34 tích hợp , trong thực tế). Đây là mã mẫu tôi đã sử dụng:
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
3

Phiên bản chức năng có nhanh hơn phiên bản thủ tục không?

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
9

Đã trả lời ngày 1 tháng 3 năm 2014 lúc 0:56Mar 1, 2014 at 0:56Mar 1, 2014 at 0:56

3

Nếu bạn kiểm tra thông tin trên python.org, bạn có thể thấy bản tóm tắt này:

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
0

Nhưng bạn thực sự nên đọc bài viết trên chi tiết để hiểu nguyên nhân của sự khác biệt hiệu suất.should read the above article in details to understand the cause of the performance difference.

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
1

IMHO:

  • Tôi cũng đề nghị bạn nên thời gian mã của bạn bằng cách sử dụng thời gian. Vào cuối ngày, có thể có một tình huống, ví dụ, bạn có thể cần phải thoát khỏi vòng lặp
  • Version Time (seconds)
    Basic loop 3.47
    Eliminate dots 2.45
    Local variable & no dots 1.79
    Using map function 0.54
    
    3 khi một điều kiện được đáp ứng. Nó có khả năng có thể nhanh hơn so với việc tìm ra kết quả bằng cách gọi
    Version Time (seconds)
    Basic loop 3.47
    Eliminate dots 2.45
    Local variable & no dots 1.79
    Using map function 0.54
    
    6.
  • Đã trả lời ngày 1 tháng 3 năm 2014 lúc 0:44Mar 1, 2014 at 0:44

Anthony Konganthony KongAnthony KongFeb 17, 2020 at 1:41

Bạn hỏi cụ thể về

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
30,
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
31 và
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
32, nhưng tôi cho rằng bạn muốn biết về lập trình chức năng nói chung. Đã tự mình kiểm tra vấn đề tính toán khoảng cách giữa tất cả các điểm trong một tập hợp các điểm, lập trình chức năng (sử dụng hàm
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
33 từ mô-đun
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
34 tích hợp , trong thực tế). Đây là mã mẫu tôi đã sử dụng:
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
3tjysdsg

Phiên bản chức năng có nhanh hơn phiên bản thủ tục không?6 silver badges15 bronze badges

Nhưng bạn thực sự nên đọc bài viết trên chi tiết để hiểu nguyên nhân của sự khác biệt hiệu suất.

Tôi cũng đề nghị bạn nên thời gian mã của bạn bằng cách sử dụng thời gian. Vào cuối ngày, có thể có một tình huống, ví dụ, bạn có thể cần phải thoát khỏi vòng lặp
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
3 khi một điều kiện được đáp ứng. Nó có khả năng có thể nhanh hơn so với việc tìm ra kết quả bằng cách gọi
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
6.

Đã trả lời ngày 1 tháng 3 năm 2014 lúc 0:44Apr 28, 2017 at 10:09

Anthony Konganthony Kongalphiii

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
91 sử dụng phụ lục, tất nhiên là chậm ở một mức độ nào đó2 gold badges21 silver badges27 bronze badges2 gold badges21 silver badges27 bronze badges

4

Danh sách tổng hợp không chỉ dành ít thời gian nhất để xây dựng danh sách mà còn làm cho

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
38 nhanh hơn nhiều, trái ngược với
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
6
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
0
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
1

Đã trả lời ngày 17 tháng 2 năm 2020 lúc 1:41Jul 23, 2019 at 6:55Jul 23, 2019 at 6:55

Thêm một sự thay đổi vào câu trả lời của alphii, thực sự là vòng lặp sẽ tốt nhất thứ hai và chậm hơn khoảng 6 lần so với

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
6
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
0

Những thay đổi chính là loại bỏ các cuộc gọi

Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
38 chậm, cũng như
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
94 có lẽ không cần thiết trong trường hợp cuối cùng. Việc đặt For Loop và bản đồ trong cùng một thuật ngữ làm cho nó hoàn toàn thực sự. Hãy nhớ rằng lambdas là các khái niệm chức năng và về mặt lý thuyết không nên có tác dụng phụ, nhưng, tốt, chúng có thể có tác dụng phụ như thêm vào
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
98. Kết quả trong trường hợp này với Python 3.6.1, Ubuntu 14.04, Intel (R) Core (TM) I7-4770 CPU @ 3,40GHz
Version Time (seconds)
Basic loop 3.47
Eliminate dots 2.45
Local variable & no dots 1.79
Using map function 0.54
1

Đã trả lời ngày 18 tháng 3 năm 2018 lúc 13:27Mar 18, 2018 at 13:27Mar 18, 2018 at 13:27

Jjmerelojjmerelojjmerelojjmerelo

21.6K7 Huy hiệu vàng35 Huy hiệu bạc82 Huy hiệu Đồng7 gold badges35 silver badges82 bronze badges7 gold badges35 silver badges82 bronze badges

1

Giảm nhanh hơn so với Loop Python?

Nói chung, Python's Cels () rất tiện dụng để xử lý các phép lặp mà không viết rõ ràng cho các vòng lặp.Vì giảm () được viết bằng C, vòng lặp bên trong của nó có thể nhanh hơn một con trăn rõ ràng cho vòng lặp.Giảm () của Python ban đầu là một hàm tích hợp (và vẫn ở Python 2.its internal loop can be faster than an explicit Python for loop. Python's reduce() was originally a built-in function (and still is in Python 2.its internal loop can be faster than an explicit Python for loop. Python's reduce() was originally a built-in function (and still is in Python 2.

Tôi có thể sử dụng gì thay vì một vòng lặp trong Python?

Hàm bản đồ () trong Python Hàm bản đồ () là một sự thay thế cho A cho một vòng lặp.Nó áp dụng một chức năng cho từng yếu tố của một điều khác. in Python The map() function is a replacement to a for a loop. It applies a function for each element of an iterable. in Python The map() function is a replacement to a for a loop. It applies a function for each element of an iterable.

Vòng lặp nào nhanh hơn so với vòng lặp?

trong khi các vòng mở rộng quy mô tốt nhất cho các mảng lớn.Đối với ... các vòng lặp là tay nhanh nhất khi nói đến các bộ dữ liệu nhỏ, nhưng chúng mở rộng quy mô kém cho các bộ dữ liệu lớn.for...of loops are hands down the fastest when it comes to small data sets, but they scale poorly for large data sets.for...of loops are hands down the fastest when it comes to small data sets, but they scale poorly for large data sets.

Bản đồ có nhanh hơn so với Loop Python không?

Bản đồ () hoạt động nhanh hơn so với vòng lặp.Xem xét cùng một mã ở trên khi chạy trong IDE này.Sử dụng bản đồ ():. Considering the same code above when run in this ide. Using map():. Considering the same code above when run in this ide. Using map():