2017-07-16 50 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) –

相关问题