É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