2013-05-09 49 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'函數在數組的每一行上創建一個迭代器。
也許有更好的創建迭代。