คำตอบสั้น ๆ : ฟังก์ชันในตัวarrayfun
ทำสิ่งที่map
ฟังก์ชันของคุณทำกับอาร์เรย์ตัวเลข:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
มีฟังก์ชันในตัวอีกสองฟังก์ชันที่ทำงานในลักษณะเดียวกัน: cellfun
(ซึ่งทำงานในองค์ประกอบของอาร์เรย์เซลล์) และstructfun
(ซึ่งทำงานในแต่ละฟิลด์ของโครงสร้าง)
แต่ฟังก์ชั่นเหล่านี้มักจะไม่จำเป็นถ้าคุณใช้ประโยชน์จาก vectorization เฉพาะโดยใช้องค์ประกอบที่ชาญฉลาดดำเนินการทางคณิตศาสตร์ สำหรับตัวอย่างที่คุณให้โซลูชัน vectorized จะเป็น:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
การดำเนินการบางอย่างจะทำงานข้ามองค์ประกอบโดยอัตโนมัติ (เช่นการเพิ่มค่าสเกลาร์ให้กับเวกเตอร์) ในขณะที่ตัวดำเนินการอื่น ๆ มีไวยากรณ์พิเศษสำหรับการดำเนินการตามองค์ประกอบ (แสดงโดย.
ตัวดำเนินการก่อนหน้า) ฟังก์ชันในตัวจำนวนมากใน MATLAB ได้รับการออกแบบมาเพื่อดำเนินการกับอาร์กิวเมนต์เวกเตอร์และเมทริกซ์โดยใช้การดำเนินการตามองค์ประกอบ (มักใช้กับมิติที่กำหนดเช่นsum
และmean
เป็นต้น) ดังนั้นจึงไม่จำเป็นต้องใช้ฟังก์ชันแผนที่
สรุปได้ว่าวิธีต่างๆในการยกกำลังสององค์ประกอบในอาร์เรย์มีดังนี้
x = 1:10; % Sample array
f = @(x) x.^2; % Anonymous function that squares each element of its input
% Option #1:
y = x.^2; % Use the element-wise power operator
% Option #2:
y = f(x); % Pass a vector to f
% Option #3:
y = arrayfun(f, x); % Pass each element to f separately
แน่นอนว่าสำหรับการใช้งานที่เรียบง่ายตัวเลือก # 1 เป็นตัวเลือกที่เหมาะสม (และมีประสิทธิภาพ) ที่สุด