Cly*_*ost 5 python arrays numpy matrix
假设我有一个函数 foo() 接受一个浮点数并返回一个浮点数。将此函数应用于 numpy 矩阵或数组中的每个元素的最快/最pythonic 方法是什么?
我本质上需要的是一个不使用循环的代码版本:
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])
Run Code Online (Sandbox Code Playgroud)
我试图在 numpy 文档中找到一些可以让我这样做的东西,但我什么也没找到。
编辑:正如我在评论中提到的,特别是我需要使用的函数是 sigmoid 函数,f(z) = 1 / (1 + exp(-z)).
如果foo确实是一个接受标量并返回标量的黑盒,那么您必须使用某种迭代。人们经常尝试np.vectorize并意识到,正如记录的那样,它并没有加快速度太多。作为广播多个输入的方式,它是最有价值的。它使用np.frompyfunc,速度稍快,但界面不太方便。
正确的 numpy 方法是更改您的函数,使其适用于数组。使用您评论中的功能应该不难做到
f(z) = 1 / (1 + exp(-z))
Run Code Online (Sandbox Code Playgroud)
有一个np.exp功能。剩下的就是简单的数学。