[PYTHON] Mehrdimensionale Array-Berechnung ohne Numpy Teil 2

Mehrdimensionale Array-Berechnung ohne Numpy

Zuvor befasste sich der Artikel http://qiita.com/ponnhide/items/c919f3bc549d1228c800 mit der Sequenzberechnung ohne Numpy, aber dieser Artikel ist eine erweiterte Version davon.

Warum nicht numpy verwenden?

Warum überlegen Sie sich nicht, wie Sie es nicht verwenden können, wenn Sie numpy verwenden können? Es ist nur ein Hobby, aber die einfache Verwendung von Numpy bei Pypy verlangsamt es ungewöhnlich. Nun, ich bin sicher, dass es andere Verwendungszwecke gibt.

Letzte Überprüfung (Addition, Subtraktion, Multiplikation und Division)

Im vorherigen Artikel habe ich geschrieben: "Wenn Sie Map und Lambda vollständig nutzen, ist die Operation zwischen Arrays umständlich", aber die Verwendung des Operatar-Moduls im Skript ist viel einfacher als die Verwendung von Lambda. Mit dem Operatormodul können Sie Operatoren in funktionaler Form verwenden. Zum Beispiel ist "operator.add (a, b)" gleichbedeutend mit "a + b".

Als allererstes __ Summe der eindimensionalen Anordnung __

from operator import add
>>> array1 = [4,5,6]
>>> array2 = [1,2,3]
>>> list(map(add, array1, array2))
[5,7,9]

__ Summe des zweidimensionalen Arrays __ Immerhin benutze ich hier Lambda,

>>> array1 = [[1,2,3],[1,2,3]]
>>> array2 = [[2,3,4],[2,3,4]]
>>> list(map(lambda x,y: list(map(add, x,y)), array1, array2))
[[3, 5, 7], [3, 5, 7]]

Wenn Sie sich wirklich nicht auf Lambda verlassen, verwenden Sie die Listeneinschlussnotation.

>>> [list(map(add, x,y)) for x,y in zip(array1,array2)]
[[3, 5, 7], [3, 5, 7]]

Sie können auch so schreiben. Ist das ein Reiniger?

Matrix-Multiplikation

Ich habe mich das letzte Mal nicht damit befasst, aber wenn ich __numpy prahlte, ohne __numpy zu verwenden, dachte ich, ich sollte auch eine Matrixmultiplikation durchführen (Punktprodukt statt Produkt von Elementen), also dachte ich gewaltsam darüber nach.

>>> from operator import mul
>>> array1 = [[2,3],[1,4],[2,1]]
>>> array2 = [[3,1,2],[2,4,2]]
>>> [[sum(map(mul, row, col)) for col in zip(*array2)] for row in array1]
[[12, 14, 10], [11, 17, 10], [8, 6, 6]]

Ich konnte es schaffen. Wenn Array1 jedoch eine Zeile xn Spalte ist, kann es nicht wie oben geschrieben werden. Wenn array1 1 Zeile xn Spalte ist

>>> from operator import mul
>>> array1 = [1,0,0,1]
>>> array2 = [[0,1],[1,1],[1,0],[1,0]]
>>> [sum(map(mul, array1, col)) for col in zip(*array2)]
[1,1]

Hmmm. Wenn Sie Lambda und ternäre Operatoren vollständig nutzen, können Sie einheitlich schreiben. ..

Statistiken im Zusammenhang

Ich werde nicht darauf eingehen, wie man es benutzt, aber in der Umgebung von Python3.4 oder höher ist das Statistikmodul standardmäßig enthalten. Wenn Sie dies verwenden, können Sie grundlegende Statistiken berechnen, während Sie den Listentyp beibehalten. https://docs.python.jp/3/library/statistics.html

Recommended Posts

Mehrdimensionale Array-Berechnung ohne Numpy Teil 2
Mehrdimensionale Array-Berechnung ohne Numpy
Berechnung des Python-Numpy-Arrays
numpy Teil 1
Python-Anwendung: Numpy Teil 3: Double Array
numpy Teil 2
Mehrdimensionales Python-Array
NumPy-Array-Operation (1)
Berechnungsgeschwindigkeit der Indizierung für ein numpy quadratisches Array
Liste der Array-Operationen (ndarray) der numerischen Berechnungsbibliothek "Numpy" von Python
Leeres mehrdimensionales Array in Python
Erstellen Sie ein Python-Numpy-Array
Mehrdimensionale Array-Initialisierung der Liste
Über Numpy Array und Asarray