Ich möchte in der Lage sein, über die Matrix zu iterieren, um eine Funktion auf jede Zeile anzuwenden. Wie kann ich das für eine Numpy-Matrix machen?

62
erogol 9 Mai 2013 im 22:34

3 Antworten

Beste Antwort

Verwenden Sie numpy.apply_along_axis(). Angenommen, Ihre Matrix ist 2D, können Sie Folgendes verwenden:

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]
65
Saullo G. P. Castro 9 Mai 2013 im 18:57

Hier ist meine Einstellung, wenn Sie versuchen möchten, Multiprozesse zu verwenden, um jede Zeile des Numpy-Arrays zu verarbeiten.

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 übernimmt eine Funktion und eine iterable.
Ich habe die 'Map'-Funktion verwendet, um einen Iterator über jede Zeile des Arrays zu erstellen.
Vielleicht gibt es eine bessere Möglichkeit, das iterable zu erstellen.

4
hamster ham 8 Jän. 2018 im 01:22

Während Sie auf jeden Fall mehr Informationen bereitstellen sollten, können Sie beim Versuch, jede Zeile durchzugehen, einfach mit einer for-Schleife iterieren:

import numpy
m = numpy.ones((3,5),dtype='int')
for row in m:
  print str(row)
57
Noel Evans 26 Aug. 2015 im 09:14