je l'équation suivante:numpy vectorisation à la place de la boucle
où v, mu sont | R^3, où Sigma est | R^(3x3) et lorsque le résultat est une valeur scalaire . La mise en œuvre cela en numpy a pas de problème:
result = np.transpose(v - mu) @ Sigma_inv @ (v - mu)
Maintenant, j'ai un tas de v-vecteurs (permet de les appeler V \ en | R^3XN) et je que pour exécuter l'équation ci-dessus d'une manière vectorisé de sorte que, comme un résultat, je reçois un nouveau vecteur Result \ in | R^1xn.
# pseudocode
Result = np.zeros((n, 1))
for i,v in V:
Result[i,:] = np.transpose(v - mu) @ Sigma_inv @ (v - mu)
J'ai regardé np.vectorize mais la documentation suggère que son la même chose que boucle sur toutes les entrées que je préférerais ne pas faire. Quelle serait une solution vectorisée élégante?
En tant que nœud latéral: n peut être assez grand et une matrice | R^nxn ne rentrera certainement pas dans ma mémoire!
modifier: le code de travail exemple
import numpy as np
S = np.array([[1, 2], [3,4]])
V = np.array([[10, 11, 12, 13, 14, 15],[20, 21, 22, 23, 24, 25]])
Res = np.zeros((V.shape[1], 1))
for i in range(V.shape[1]):
v = np.transpose(np.atleast_2d(V[:,i]))
Res[i,:] = (np.transpose(v) @ S @ v)[0][0]
print(Res)
Il serait plus facile si vous fournir un exemple de travail minimum de ce que vous voulez atteindre, même si vous utilisez des boucles (par exemple, y compris 'importation, on déclarations et définitions de tous les symboles que vous utilisez). – norok2
True: J'ai ajouté un exemple minimal – juqa
Je voudrais regarder dans 'np.einsum', bien que je crois que c'est l'une des fonctions les plus énigmatiques de' numpy', il peut être exactement ce que vous voulez. – norok2