MATLAB 的“cellfun”的 Python 或 Numpy 方法

rak*_*bar 1 python numpy elementwise-operations

是否有类似于 MATLABs“cellfun”的 python 或 numpy 方法?我想将一个函数应用于一个对象,该对象是一个 MATLAB 元胞数组,具有不同长度的 ~300k 元胞。

一个非常简单的例子:

>>> xx = [(4,2), (1,2,3)]
>>> yy = np.exp(xx)

Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
yy = np.exp(xx)
AttributeError: 'tuple' object has no attribute 'exp'
Run Code Online (Sandbox Code Playgroud)

jez*_*jez 5

最易读/可维护的方法可能是使用列表理解

yy = [ np.exp(xxi) for xxi in xx ]
Run Code Online (Sandbox Code Playgroud)

这依赖于numpy.exp将每个元组隐式转换为 a numpy.ndarray,这反过来意味着您将获得numpy.ndarrays列表而不是元组列表。这对于几乎所有目的来说都可以,但是如果您绝对必须拥有也很容易安排的元组:

yy = [ tuple(np.exp(xxi)) for xxi in xx ]
Run Code Online (Sandbox Code Playgroud)

出于某些目的(例如避免内存瓶颈),您可能更喜欢使用生成器表达式而不是列表推导式(圆括号而不是方括号)。