[PYTHON] Calcul de tableau multidimensionnel sans Numpy Partie 2

Calcul de tableau multidimensionnel sans Numpy

Auparavant, l'article http://qiita.com/ponnhide/items/c919f3bc549d1228c800 traitait du calcul de séquence sans numpy, mais cet article en est une version avancée.

Pourquoi ne pas utiliser numpy?

Pourquoi ne pensez-vous pas à un moyen de ne pas l'utiliser lorsque vous pouvez utiliser numpy? C'est juste un passe-temps, mais le simple fait d'utiliser numpy sur pypy le ralentit anormalement. Eh bien, je suis sûr qu'il existe d'autres utilisations.

Dernière révision (addition, soustraction, multiplication et division)

Dans l'article précédent, j'ai écrit que "si vous utilisez pleinement map et lambda, l'opération entre les tableaux est délicate", mais le script est beaucoup plus simple d'utiliser le module operatar que d'utiliser lambda. Le module opérateur vous permet d'utiliser des opérateurs sous forme fonctionnelle. Par exemple, ʻoperator.add (a, b) est synonyme de ʻa + b.

Tout d'abord __ Somme du tableau unidimensionnel __

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

__ Somme du tableau à deux dimensions __ Après tout, j'utilise lambda ici,

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

Si vous ne comptez vraiment pas sur lambda, utilisez la notation d'inclusion de liste.

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

Vous pouvez également écrire comme ça. Est-ce que celui-ci est plus propre?

Multiplication matricielle

Je ne l'ai pas traité la dernière fois, mais si je me vantais de __numpy sans utiliser __numpy, je pensais que je devrais aussi faire de la multiplication matricielle (produit scalaire au lieu de produit d'éléments), alors j'y ai réfléchi de force.

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

J'ai pu le faire. Cependant, si array1 est une colonne de 1 ligne xn, il ne peut pas être écrit comme ci-dessus. Si tableau1 est 1 ligne xn colonne

>>> 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. Si vous utilisez pleinement les opérateurs lambda et ternaires, vous pouvez écrire de manière unifiée. ..

Statistiques liées

Je ne parlerai pas de son utilisation, mais dans l'environnement de python3.4 ou version ultérieure, le module de statistiques est inclus par défaut. Si vous l'utilisez, vous pouvez calculer des statistiques de base tout en conservant le type de liste. https://docs.python.jp/3/library/statistics.html

Recommended Posts

Calcul de tableau multidimensionnel sans Numpy Partie 2
Calcul de tableau multidimensionnel sans Numpy
calcul de tableau numpy python
numpy partie 1
Application Python: Numpy Partie 3: Double tableau
numpy partie 2
Tableau multidimensionnel Python
Fonctionnement du tableau NumPy (1)
Vitesse de calcul de l'indexation pour un tableau quadratique numpy
Liste des opérations de tableau (ndarray) de la bibliothèque de calcul numérique de Python "Numpy"
Tableau multidimensionnel vide en python
Créer un tableau numpy python
Initialisation de tableau multidimensionnel de la liste
À propos du tableau Numpy et d'un tableau