如何对numpy矩阵中的每个元素执行运算



假设我有一个函数foo(),它接受一个浮点值并返回一个浮点。将此函数应用于numpy矩阵或数组中的每个元素的最快/最Python的方法是什么?

我真正需要的是这个代码的一个不使用循环的版本:

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文档中找到一些可以让我这样做的东西,但我什么都没找到。

编辑:正如我在评论中提到的,特别是我需要使用的函数是sigmoid函数f(z) = 1 / (1 + exp(-z))

如果foo真的是一个接受标量并返回标量的黑盒,那么您必须使用某种迭代。人们经常尝试np.vectorize,并意识到,正如所记录的那样,它并不能加快速度。作为一种广播多种输入的方式,它是最有价值的。它使用np.frompyfunc,速度稍快,但接口不太方便。

正确的numpy方法是更改函数,使其与数组一起工作。这应该不难与你的评论中的功能联系起来

f(z) = 1 / (1 + exp(-z))

有一个np.exp函数。剩下的就是简单的数学。

最新更新