Python中的Arrayfun?

时间:2015-03-04 00:50:37

标签: python matlab

我试图将一些代码从Matlab转换为Python。知道如何转换这条线吗?我对python很新,我以前从未见过arrayfun。谢谢。非常感激。

 zj=arrayfun(@sigmoid,aj);

3 个答案:

答案 0 :(得分:4)

只要您处理数字数据,就会想要使用数值库numpy

在其中,名为arrayfun的Matlab函数只是该函数的矢量化形式。 E.g。

Matlab的:

>> a = 1:4

a =

     1     2     3     4

>> arrayfun(@sqrt, a)

ans =

    1.0000    1.4142    1.7321    2.0000

>> sqrt(a)

ans =

    1.0000    1.4142    1.7321    2.0000

而在numpy,你做的是:

>>> import numpy as np
>>> a = np.arange(4)
>>> np.sqrt(a)
array([ 0.        ,  1.        ,  1.41421356,  1.73205081])

大多数函数都可以被矢量化,sigmoid也不例外。例如,如果sigmoid被定义为1./(1 + exp(-x)),那么你可以用Python编写:

def sigmoid(x):
    return 1./(1 + np.exp(-x))

zj = sigmoid(aj)

答案 1 :(得分:4)

通用方法,使用循环:

 zj=[sigmoid(x) for x in aj]

答案 2 :(得分:1)

尽管所有的回复都是正确的,而且列表理解可能是首选的书写方式,因为它读起来如此优雅,但我确实觉得有必要补充一点:arrayfun 在我的文章中最直接的翻译成 Python意见仍然是map。它返回一个迭代器,它可以例如传递给 list 确实模仿 arrayfun 为你做的事情。换句话说,在我看来,list(map(sigmoid,aj))arryfun(@sigmoid,aj) 的更直接翻译。