2 votes

Puis-je faire des surfaces propres avec 32bit et numpy ?

J'essaie actuellement d'implémenter les faces propres avec numpy, mais il semble avoir des difficultés avec mon système Linux 32bit (j'utilise 32bit à cause du mauvais support de flash et java en 64bit, mon processeur est 64bit ), car lorsque j'essaie de multiplier deux vecteurs pour obtenir une matrice (vecteur * vecteur transposé) numpy me donne

ValueError: broadcast dimensions too large.

J'ai lu que ce problème était dû à un manque de mémoire et qu'il pouvait être résolu par l'utilisation d'un système 64 bits. Existe-t-il un moyen de contourner ce problème ? La matrice serait composée de 528000*528000 éléments. D'après mon document, cette grande matrice est nécessaire pour la matrice de covariance (en additionnant toutes ces énormes matrices et en les divisant par le nombre de matrices).

Mon code ressemble à ceci (je ne comprends pas pourquoi numpy me donne une matrice de toute façon, parce que pour ma connaissance de la matrice, elle semble dans le mauvais sens (horizontal*vertical), mais cela a fonctionné avec des exemples de taille plus petite) :

tmp = []
for face in faces: # just an array of all face vectors (len = 528000)
    diff = np.subtract(averageFace, face)
    diff = np.asmatrix(diff)
    tmp.append(np.multiply(diff, np.transpose(diff)))
C = np.divide(np.sum(tmp, axis=0), len(tmp))

2voto

eat Points 4573

En tant que pv Comme nous l'avons déjà expliqué, il n'est pas vraiment possible en pratique d'essayer de produire une matrice de covariance aussi grande.

Mais veuillez noter que les vecteurs propres (expliqués dans votre drexel lien) de phi* phi^T et phi^T* phi sont liés et c'est la clé pour rendre le problème plus gérable. Plus d'informations sur ce sujet dans Surface propre .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X