web-dev-qa-db-ja.com

各関数を適用するためにNumpy行列の行を繰り返しますか?

行列を反復処理して、各行に関数を適用できるようにしたいと思います。 Numpy行列に対してどうすればよいですか?

41
erogol

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]
56

確かにより多くの情報を提供する必要がありますが、各行を通過しようとしている場合は、forループで反復できます。

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

マルチプロセスを使用してnumpy配列の各行を処理しようとする場合の私の見解は次のとおりです。

from multiprocessing import Pool
import numpy as np

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

if __== '__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」関数を使用して、配列の各行に反復子を作成しました。
たぶん反復可能なものを作成する方が良いでしょう。

4
hamster ham