Câu hỏi của tôi: Tôi nhận thấy rằng rất nhiều câu trả lời hay cho các câu hỏi Matlab về SO thường xuyên sử dụng chức năng này bsxfun
. Tại sao?
Động lực: Trong tài liệu Matlab cho bsxfun
, ví dụ sau được cung cấp:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
Tất nhiên chúng ta có thể thực hiện thao tác tương tự bằng cách sử dụng:
A = A - (ones(size(A, 1), 1) * mean(A));
Và trên thực tế, một bài kiểm tra tốc độ đơn giản cho thấy phương pháp thứ hai nhanh hơn khoảng 20%. Vậy tại sao phải sử dụng phương pháp đầu tiên? Tôi đoán có một số trường hợp sử dụng bsxfun
sẽ nhanh hơn nhiều so với phương pháp "thủ công". Tôi thực sự thích thú khi thấy một ví dụ về tình huống như vậy và một lời giải thích về lý do tại sao nó nhanh hơn.
Ngoài ra, một yếu tố cuối cùng cho câu hỏi này, một lần nữa từ tài liệu Matlab cho bsxfun
: "C = bsxfun (vui vẻ, A, B) áp dụng thao tác nhị phân từng phần tử được chỉ định bởi hàm xử lý vui cho mảng A và B, với singleton cho phép mở rộng. ". Cụm từ "với mở rộng singleton được bật" nghĩa là gì?
timeit
chức năng trong liên kết mà bạn / angainor / Dan cung cấp.
tic...toc
xung quanh các dòng, tốc độ của mã sẽ phụ thuộc vào việc phải đọc các chức năng vào bộ nhớ.