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 ü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.
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?
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. ..
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