Élément-sage de la multiplication de matrice dans NumPy
Je suis en train de faire ma première véritable incursion dans le monde de Python NumPy et de faire des traitements d'image. J'ai une image chargée en 3 dimensions un Tableau NumPy, où l'axe 0 représente l'image de bandes, tandis que les axes 1 et 2 représentent les colonnes et les lignes de pixels. À partir de cela, j'ai besoin de prendre le 3x1 matrice représentant de chaque pixel, et d'effectuer quelques opérations qui entraînent une 3x1 de la matrice, qui sera utilisé pour construire une image de résultats.
Ma première approche (simplifié et avec des données aléatoires) ressemble à ceci:
import numpy as np
import random
factor = np.random.rand(3,3)
input = np.random.rand(3,100,100)
results = np.zeros((3,100,100))
for x in range(100):
for y in range(100):
results[:,x,y] = np.dot(factor,input[:,x,y])
Mais ce qui me frappe comme inélégant et inefficace. Est-il un moyen de le faire dans un élément-sage fasion, par exemple:
results = np.dot(factor,input,ElementWiseOnAxis0)
En essayant de trouver une solution à ce problème je suis tombé sur cette question, ce qui est évidemment tout à fait similaire. Cependant, l'auteur n'a pas réussi à résoudre le problème à leur satisfaction. Je suis en espérant que quelque chose a changé depuis 2012, d'ou mon problème est suffisamment différente de la leur afin de le rendre plus facilement résoluble.
OriginalL'auteur Joe | 2014-09-18
Vous devez vous connecter pour publier un commentaire.
Tableaux Numpy utilisation de l'élément de sage multiplication par défaut. Découvrez numpy.einsum, et numpy.tensordot. Je pense que ce que vous recherchez est quelque chose comme ceci:
Dans mon cas, l'entrée de la forme: (100, 100, 3). M'a fallu un certain temps pour comprendre, mais pourrait être utile à d'autres. Dans mon cas, c'était: résultats = np.einsum('ij,klj->kli',facteur,entrée)
OriginalL'auteur farenorth