Câu trả lời ngắn gọn: hàm tích hợp sẵn arrayfun
thực hiện chính xác những gì map
hàm của bạn thực hiện đối với mảng số:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Có hai hàm tích hợp khác hoạt động tương tự: cellfun
(hoạt động trên các phần tử của mảng ô) vàstructfun
(hoạt động trên mỗi trường của cấu trúc).
Tuy nhiên, những chức năng này thường không cần thiết nếu bạn tận dụng lợi thế của vectơ hóa, cụ thể là sử dụng các toán tử số học khôn ngoan nguyên tố . Đối với ví dụ bạn đã đưa ra, một giải pháp được vector hóa sẽ là:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Một số phép toán sẽ tự động hoạt động trên các phần tử (như thêm một giá trị vô hướng vào một vectơ) trong khi các toán tử khác có cú pháp đặc biệt cho phép toán thông minh phần tử (được ký hiệu bằng một .
trước toán tử). Nhiều hàm tích hợp trong MATLAB được thiết kế để hoạt động trên các đối số vectơ và ma trận bằng cách sử dụng các phép toán khôn ngoan (thường được áp dụng cho một thứ nguyên nhất định, chẳng hạn như sum
vàmean
chẳng hạn) và do đó không yêu cầu các hàm bản đồ.
Tóm lại, đây là một số cách khác nhau để bình phương mỗi phần tử trong một mảng:
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
Tất nhiên, đối với một hoạt động đơn giản như vậy, tùy chọn số 1 là lựa chọn hợp lý nhất (và hiệu quả).