我试图将一些代码从Matlab转换为Python。知道如何转换这条线吗?我对python很新,我以前从未见过arrayfun
。谢谢。非常感激。
zj=arrayfun(@sigmoid,aj);
答案 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)
的更直接翻译。