Khi tôi bắt đầu làm việc với MATLAB trước đây trong trường đại học, giám sát viên của tôi sẽ giết tôi nếu anh ta thấy bất kỳ vòng lặp không cần thiết (anh ta sẽ yêu cầu trao đổi nó cho kron
hoặc bất kỳ thao tác chỉ mục nào có thể). Sau đó, tôi đã cố gắng tránh càng nhiều càng tốt bất kỳ vòng lặp nào trên MATLAB, tìm kiếm MATLAB tối nhất mã hóa các cách để làm phép màu đen thay vì một vòng lặp đơn giản.Cellfun so với Simple Matlab Loop hiệu suất
Và một ngày tôi phát hiện ra cellfun
, khiến sự kỳ diệu màu đen khá đơn giản hơn, tôi có thể thay đổi nhiều vòng làm việc với các tế bào và cellfun
kết hợp, nhưng một ngày nào đó tôi thấy một post about cellfun mà làm cho tôi thắc mắc nếu thừa hưởng kiến thức matlab của tôi là sự thật , đó là: rằng vòng lặp MATLAB sẽ luôn chậm hơn một hàm được biên dịch sẵn có, đó là điều tôi đã có rất nhiều niềm tin. Tôi đã thử nghiệm nó trong một trong những triển khai của tôi và trên thực tế, cho vòng lặp sẽ nhanh hơn! Tôi đã như thế, OMG, tất cả những ngày đó làm cho mã không rõ ràng lãng phí vì không có gì hahaha. Kể từ ngày đó, tôi đã ngừng làm việc chăm chỉ để cố gắng tối ưu hóa mã MATLAB, thông thường nó phụ thuộc vào từng trường hợp và như vậy.
Hôm nay tôi saw this answer, nhớ nỗ lực của tôi để tránh nhiều vòng lặp MATLAB càng tốt (Tôi không biết liệu tác giả đó có tránh được hiệu suất hay không), nhưng dù sao nó nhắc tất cả điều hiệu suất vòng lặp MATLAB này). Và một câu hỏi đến với tâm trí của tôi: Cellfun có tốt hơn so với các vòng không? Khi nào điều đó đúng?
Đối với câu trả lời của tôi mà bạn đã đề cập: có, tôi cố gắng tránh các vòng lặp 'for', giống như bạn làm (hoặc thường làm) và động lực của tôi là hiệu suất. Tôi nghĩ (hoặc được sử dụng để suy nghĩ?) Đó là sự thật rằng 'for' vòng thường chậm hơn và nên tránh. –
Rõ ràng 'cellfun' chậm hơn trừ trường hợp đặc biệt. Xem http://www.mathworks.com/matlabcentral/answers/42335 và http: //www.mathworks.com/matlabcentral/newsreader/view_thread/301894 –
@LuisMendo Vâng, chính xác! Nhưng tiếc là 'cellfun' với các chức năng ẩn danh xử lý thường chậm hơn các vòng lặp' for' ... điều này sẽ khiến tôi chán nản vì nỗ lực không có gì. Cảm ơn bạn đã tham khảo. – Werner