คำถามของฉัน:ฉันสังเกตเห็นว่าคำตอบที่ดีมากมายสำหรับคำถาม Matlab ใน SO มักใช้ฟังก์ชันbsxfun
นี้ ทำไม?
แรงจูงใจ:ในเอกสาร Matlab สำหรับbsxfun
ตัวอย่างต่อไปนี้มีให้:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
แน่นอนเราสามารถดำเนินการเดียวกันโดยใช้:
A = A - (ones(size(A, 1), 1) * mean(A));
และในความเป็นจริงการทดสอบความเร็วอย่างง่ายแสดงให้เห็นว่าวิธีที่สองเร็วขึ้นประมาณ 20% ทำไมต้องใช้วิธีแรก? ฉันคาดเดาว่ามีบางสถานการณ์ที่การใช้bsxfun
จะเร็วกว่าวิธีการ "ด้วยตนเอง" มาก ฉันสนใจที่จะเห็นตัวอย่างของสถานการณ์ดังกล่าวและคำอธิบายว่าเหตุใดจึงเร็วกว่า
นอกจากนี้องค์ประกอบสุดท้ายของคำถามนี้อีกครั้งจากเอกสาร Matlab สำหรับbsxfun
: "C = bsxfun (fun, A, B) ใช้การดำเนินการไบนารีองค์ประกอบต่อองค์ประกอบที่ระบุโดยฟังก์ชันจับ fun กับอาร์เรย์ A และ B โดยใช้ singleton เปิดใช้งานส่วนขยาย ". วลี "พร้อมเปิดใช้การขยายซิงเกิลตัน" หมายความว่าอย่างไร
tic...toc
รอบ ๆ บรรทัดความเร็วของโค้ดจะขึ้นอยู่กับการต้องอ่านฟังก์ชันในหน่วยความจำ