2013-05-09 50 views
25

我希望能够迭代矩阵以将函数应用于每一行。我该如何做一个Numpy矩阵?遍历Numpy矩阵行来应用每个函数?

+2

如果你解释你正在努力达到什么样的功能或应用什么样的功能,很可能会得到更有帮助的答案。此外,你可能想看看:http://stackoverflow.com/questions/8079061/function-application-over-numpys-matrix-row-column – root 2013-05-09 18:42:39

+0

请发布您的代码。如果您还没有尝试过,请尝试一些东西,并发布您遇到的问题 – 2013-05-09 18:49:06

回答

39

使用numpy.apply_along_axis()。假设你的矩阵是2D的,你可以使用这样的:

import numpy as np 
mymatrix = np.matrix([[11,12,13], 
         [21,22,23], 
         [31,32,33]]) 
def myfunction(x): 
    return sum(x) 

print np.apply_along_axis(myfunction, axis=1, arr=mymatrix) 
#[36 66 96] 
+4

如果您使用'numpy'函数,您可以(通常)只指定轴,如:'mymatrix.sum(axis = 1 )'。 – root 2013-05-09 19:03:38

+1

这是正确的,在myfunction sum()只是一个例子,但对于一些情况下,像[这里](http://stackoverflow.com/questions/15094619/fitting-a-3d-array-of-data-to -a-1d-function-with-numpy-or-scipy/16315330#16315330),'np.apply_along_axis()'可能非常有用 – 2013-05-09 19:06:24

+1

可以,是的 - 不知道函数会使问题变得模糊不清。 – root 2013-05-09 19:11:05

28

虽然你当然应该提供更多的信息,如果你试图去的每一行,你可以只用一个重复的循环:

import numpy 
m = numpy.ones((3,5),dtype='int') 
for row in m: 
    print str(row) 
+2

这不是一个低效的实现吗? – Lokesh 2017-03-28 17:59:29

0

这里是我拿,如果你想使用multiprocesses处理numpy的阵列中的每一行的尝试,

from multiprocessing import Pool 
import numpy as np 

def my_function(x): 
    pass  # do something and return something 

if __name__ == '__main__':  
    X = np.arange(6).reshape((3,2)) 
    pool = Pool(processes = 4) 
    results = pool.map(my_function, map(lambda x: x, X)) 
    pool.close() 
    pool.join() 

pool.map采取在功能和迭代。
我使用'map'函数在数组的每一行上创建一个迭代器。
也许有更好的创建迭代。