如何对numpy矩阵中的每个元素执行操作?

时间:2016-07-26 18:41:54

标签: python arrays numpy matrix

假设我有一个函数foo(),它接受一个float并返回一个float。将这个函数应用于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])

我试图在numpy文档中找到一些可以让我这样做的东西,但我还没有找到任何东西。

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

1 个答案:

答案 0 :(得分:3)

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

正确的numpy方式是更改您的功能,以便它适用于数组。这对你的评论中的功能来说不难做到

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

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