2017-07-16 48 views
0

如果我有載體[1,2,3,4],我希望用一個函數f到每一個元素得到如何應用一個函數到每一個元素

[f(1),f(2),f(3),f(4)] 

如果我有一個矩陣mat

>> mat=magic(3) 
mat = 
    8  1  6 
    3  5  7 
    4  9  2 

我希望得到

 f(8)  f(1)  f(6) 
    f(3)  f(5)  f(7) 
    f(4)  f(9)  f(2) 

是什麼簡單的方法來做到這一點在matlab ?

+2

你試過'f(mat)'嗎? – rahnema1

+3

請[編輯]問題以包含你試圖在[mcve]中使用它的功能。大多數函數可以重構爲接受矩陣。 – Adriaan

+0

@Adriaan對不起,我只是測試一個undefine函數'f',但沒有指定函數。我意識到這是不可能的 – yode

回答

1

使用MATLAB的arrayfun功能如下:

arrayfun(f,mat) 

mat = magic(3); %defines input 
f = @(x) x.^2; %defines f (f is the square function) 
arrayfun(f,mat); %applies f on mat 

結果

mat = 

8  1  6 
3  5  7 
4  9  2 

arrayfun(f,mat)= 

64  1 36 
9 25 49 
16 81  4 
+0

@SardarUsama - 關於第一個評論,這是真的,我修正了它。關於第二個 - 它僅用於示範 – drorco

+1

這確實是一個通用解決方案。請注意,大多數函數都可以修改爲隱式矩陣支持(就像您已經使用的元素明智的權力;我明白這只是一個例子),並且這些方法可能會更快,因爲'arrayfun'只是一個循環僞裝 – Adriaan

+0

只爲懶惰,像我一樣:[矢量化](https://ch.mathworks.com/help/matlab/ref/vectorize.html?s_tid=doc_ta) –

相關問題