1. Diễn đàn SEO chất lượng, rao vặt miễn phí có PA, DA cao: chuanmen.edu.vn | okmen.edu.vn
    Dismiss Notice
  2. Hiện tại diễn đàn không cho phép đăng các thông tin về game bài cờ bạc theo yêu cầu của VNNIC mong các bạn thông cảm!
    Dismiss Notice

Tiêu dùng Cython để nâng cao tốc Python 2 vòng lặp lồng nhau



NHÀ TÀI TRỢ CHÍNH:

* diễn đàn SEO miễn phí
* Lắp cửa tự động – Cửa cổng tự động châu âu bảo hành 3 năm
* Công ty lắp đặt Cửa Tự Động, Cổng Tự Động tại thành phố Hồ Chí Minh
* Thi công lắp đặt cổng tự động tại hcm
* Đại lý cửa tự động tại Tp. Hồ Chí Minh nhập khẩu chính hãng
Hiện tại diễn đàn không cho phép đăng các thông tin về game bài cờ bạc theo yêu cầu của VNNIC mong các bạn thông cảm!

Thảo luận trong 'Rao Vặt Khác' bắt đầu bởi digi2936, 7/10/19.

  1. digi2936
    Offline

    digi2936 admin

    (Website tài trợ bởi: cong tu dong)
    Python là tiếng nói lập trình phổ quát nhất hoc lap trinh web hiện nay. Dễ học, áp dụng đa dạng, thư viện rộng rãi, áp dụng cho xử lý, phân tích dữ liệu lý tưởng, khiến người nào, Machine Learning, Deep Learning mà ko sử dụng Python nhưng đi đáng bóng mà không sở hữu bóng.

    tuy nhiên nhược điểm của Python là chạy chậm, rất chậm. Các đoạn lệnh nào chạy nhanh, thực ra là Python gọi vào thư viện bao lấy code C hoặc C++ thuần, tỉ dụ như numpy, pandas, opencv, tensorflow, yolo...

    Để thí nghiệm, làm Công trình prototype chúng ta có thể sử dụng Python thuần, nhưng khi lên production cần tối ưu tốc độ, thỉnh thoảng là bảo mật code chúng ta không thể máy móc dùng Python mà cần tiêu dùng thêm kỹ thuật khác nữa. Bài viết này giới thiệu Cython và tận dụng tối đa các thư viện gốc C/C++ để nâng cao tốc độ.

    ví dụ minh hoạ tiêu dùng OpenCV để mở 1 ảnh con báo gấm sau ấy tiêu dùng 2 vòng lặp for lồng nhau để chỉnh độ xám từng điểm ảnh. Ví dụ ảnh mang kích thước 769 x 960 thì chúng ta phải thực hành 738,240 động tác chỉnh độ xám cho từng điểm ảnh.

    Bước 1: Hãy clode demo code về
    Bạn thiết yếu Python 3.7.x cài sẵn trên máy tính

    giả dụ bạn thấy hiện ra hình ảnh con báo gấm là ok ! Code nguyên gốc chưa tối ưu đây. Code học lập trình cho trẻ sử dụng thư viện numpy, cv2, math, time.
    Trước và sau 2 vòng lặp sẽ với đoạn code để đo thời gian

    Bước 2: Thay np.arange và range, gói đoạn lệnh thay đổi contrast vào hàm
    Ở đoạn code trên, chúng ta với thể thay thế np.arange bằng cú pháp thuần Python là range. Nhờ động tác này chúng ta giảm phụ thuộc vào numpy.
    Tiếp đó gói đoạn logic thay đổi contrast vào hàm def adjust_contrast(img, contrast): việc này chỉ để code dễ đọc thôi chứ ko tăng tốc.
    Chạy lại kết quả là 0.366 giây, nhanh hơn một.8 lần. Chúng ta vẫn được dạy là Numpy là thư viện xử lý rất là nhanh. Tuy nhiên nó chỉ nhanh đối mang những phép toán ma trận đa dạng chiều thôi, chứ lệnh thuần tuý như np.arange thì nó sẽ không bằng hàm range chuẩn của Python đâu.

    Bước 3: sử dụng Cython
    Để tiêu dùng Cython, chúng ta cần tách hàm adjust_contrast ra một file contrast.pyx, file này hoàn toàn không nhúng code C, hay dùng biến kiểu strongly type

    ngoài ra thêm 1 file setup.py nội dung như sau.

    Bước 4: Thay hàm Python bằng hàm kiểu C
    Chúng ta cải tiến contrast.pyx thành contrast_c.pyx và setup_c.pyx

    Xem thêm =>> https://mindx.edu.vn/blog/post/ung-dung-python

    Thay def bằng cpdef
    khái niệm các biến với kiểu tường minh cdef int x, y, width, height

    Bước 5: dùng hàm ceil C thay vì hàm ceil của Python
    nếu ngó vào file contrast_c.pyx bước 3, chúng ta thấy nó tiêu dùng một hàm math.ceil của Python. Như vậy code biên dịch ra C gọi vào module math của Python. Đây là cách thức rất thiếu tối ưu, hay tối ưu ko dứt điểm. Chúng ta cần bỏ càng phổ thông phụ thuộc vào những module Python trong file pyx, ngược lại phải tận dụng tối đa những thư viện C, C++ thuần.
    Đây là contrast_ceil.pyx

    Thay vì sử dụng hàm math.ceil của python chúng ta dùng hàm ceil của C.

    tại sao tốc độ lại nâng cao dữ dội tới vậy 2 vòng lặp lồng nhau sẽ khiến cho một lệnh chạy chậm chạy gấp lên M x N lần. Ví như ảnh cỡ 4 Mega Pixels thì hàm kém tối ưu sẽ là thảm hoạ.

    Bước 6: tiêu dùng Numpy nhân ma trận
    Đây là phương pháp đúng đắn khôn ngoan nhất bởi Numpy mang sẵn hàm nhân ma trận khôn cùng tối ưu. Code lại hết sức thuần tuý

    Tổng kết
    hạn chế tối đa việc tiêu dùng 2 vòng lặp lồng nhau khi xử lý dữ liệu. Phấn đấu thay bằng hàm với sẵn trong Numpy, luôn là tối ưu nhất
    nếu như yêu cầu dùng vòng lặp, mà không dùng được Numpy hãy tiêu dùng Cython để tối ưu tốc độ. Tốc độ sẽ cải thiện ít ra là một.5 lần.

    [​IMG]
     

    Nguồn: batdongsan24h.edu.vn

Chia sẻ trang này