簡體   English   中英

MATLAB:如何在輸入向量的所有可能組合上評估具有多個輸入的函數

[英]MATLAB: How to evaluate a function with multiple inputs on all possible combinations of input vectors

說我有一個簡單的功能,具有三個輸入

f = @(a,b,c) a+b+c

我想在輸入組合上評估此功能

A = 1:10
B = 2:2:10
C = 0.1:0.1:1

並將輸出存儲在矩陣F

現在,我正在執行以下操作:

F = NaN(length(A),length(B),length(C));

for ia = 1:length(A)
   for ib = 1:length(B)
     for ic = 1:length(C)
        F(ia,ib,ic) = f(A(ia),B(ib),C(ic))
     end
   end
end

我想知道是否存在一種有效的方法,而無需使用草率的for循環,而不必向量化函數f

如果您希望使用簡潔的語法,而不在乎內存或速度,則可以使用:

  1. ndgrid生成所有組合; 接着
  2. arrayfun在每個組合上調用f

第二步利用了以下事實:可以使用多個數組作為輸入來調用arrayfun ,在這種情況下,它將從每個數組中獲取相應的元素:

[aa, bb, cc] = ndgrid(A,B,C);        %// step 1
result = arrayfun(f, aa, bb, cc);    %// step 2

關於內存和速度問題,我在上面提到:

  • 如果輸入向量很大,則第1步需要占用大量內存 ,因為所有組合都是一次生成的。
  • 步驟2可能導致代碼比使用for循環 例如看這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM