我可以在一個班輪中寫下以下內容嗎?Matlab列表理解
x = [1,3,5]
res = zeros(1,size(x,2));
for i=1:size(x,2);
res(i) = foo(x(i);
end;
假設foo函數沒有按預期處理數組。在我的情況下,即使給出一個數組作爲參數,foo也會返回一個標量。
在Python中,例如,它應該是這樣的:
x = [1,3,5]
res = [foo(y) for y in x]
我可以在一個班輪中寫下以下內容嗎?Matlab列表理解
x = [1,3,5]
res = zeros(1,size(x,2));
for i=1:size(x,2);
res(i) = foo(x(i);
end;
假設foo函數沒有按預期處理數組。在我的情況下,即使給出一個數組作爲參數,foo也會返回一個標量。
在Python中,例如,它應該是這樣的:
x = [1,3,5]
res = [foo(y) for y in x]
arrayfun
是你所需要的。例如:
res = arrayfun(@foo, x)
foo
由於總是返回一個標量,上述將工作和res
也將是相同的尺寸x
的向量。如果foo
返回可變長度輸出,則必須在arrayfun
的調用中將'UniformOutput'
設置爲false
或0
。輸出將是一個cell
陣列。
只需添加到@yoda的很好的答案,而不是使用UniformOutput
,你也可以使用{}
括號:
res = arrayfun(@(t){foo(t)}, x)
而且,在某些場合,foo
已經被量化。
x = 1:10;
foo = @(t)(power(t,2));
res = foo(x);
你能否更詳細地解釋一下'foo = @(t)(power(t,2));'意味着什麼? –
這個問題是如果我想要做一些像'{i^2 for i to N}'那樣的問題?但我不想爲'^ 2'定義一個函數,有沒有其他選擇? –
「@」做什麼? –
@LucyBrennan它創建一個[函數句柄](http://www.mathworks.com/help/techdoc/matlab_prog/brfpxgt-1.html)。您可以閱讀該文檔頁面和相關鏈接瞭解更多信息 – abcd
Thx。如果foo實際上需要兩個參數,並且我希望第二個參數在所有迭代中保持不變,那該怎麼辦? –