说我有一个函数foo(),它接受一个浮点数并返回一个浮点数。将此函数应用于numpy矩阵或数组中的每个元素的最快/最蟒蛇方法是什么?如何对numpy矩阵中的每个元素执行操作?
我本质上需要的是这个代码的版本,不使用循环:
import numpy as np
big_matrix = np.matrix(np.ones((1000, 1000)))
for i in xrange(np.shape(big_matrix)[0]):
for j in xrange(np.shape(big_matrix)[1]):
big_matrix[i, j] = foo(big_matrix[i, j])
我试图找到numpy的文档中的东西,让我做到这一点,但我的天堂”什么都没发现。
编辑:正如我在评论中所提到的,特别是我需要使用的功能是双曲线函数,f(z) = 1/(1 + exp(-z))
。
同意矢量化是答案。您将需要重新考虑foo()所做的功能,目前它适用于单个元素。矢量化意味着一次对整个行/列进行操作,从而消除循环。 –
'np.vectorize'绝对是一般情况下最“pythonic”的。然而,对于某些函数'foo',通过完全不使用函数并依赖'numpy'向量操作,你可能会做得更好(因为'np.vectorize'实际上没有做任何事情来使得计算更高性能)。 – mgilson
我专门希望使用S形函数,即'F(z)的= 1 /(1 + EXP(-z))' –