0
votes

Quelle fonction mathématique réelle est-elle performante?

Dans Python et Matlab, vous pouvez utiliser une fonction appelée Remodape () pour modifier les dimensions de la matrice.

Quelle opération est-ce dans l'algèbre linéaire, est-ce un changement de base, ou une multiplication de matrice plus simple ou n'est-ce pas de ces entre eux?


1 commentaires

Avez-vous examiné les exemples de la Remodape


3 Réponses :


3
votes

Cette fonction n'a rien à voir avec l'algèbre linéaire, c'est un tour d'indexation simple. Considérons ce qui suit (je vais utiliser Syntaxe MATLAB , mais en python, en particulier en utilisant NUMPY / SCIPY , il fonctionnerait le idem):

A = [1 2 3; 4 5 6]; % 2-by-3 matrix
B = reshape(A,3,2); % B is 3-by-2
B =
     1     5
     4     3
     2     6


5 commentaires

Toute référence? Que ce que vous montrez est simplement une transposition simple. Je ne suis pas sûr si dans une remodele plus compliquée, ce sera la même chose.


@Karls vient de choisir cela dans matlab, la transposition de A serait [1 4; 2 5; 3 6] , qui est une matrice différente de celle transposée. La transposition change l'ordre des éléments, d'où il est plus cher qu'un simple remodelage


OK, à droite, ce n'est pas équivalent à transposer. Je pense toujours que cela peut être plus compliqué qu'un en-tête. Avez-vous une référence qui peut soutenir votre explication?


@Karls: La référence est la documentation sur Remodape , laquelle Adriaan est liée, ainsi que cette autre page de documentation .


Vous pouvez créer un tableau vraiment important et le temps qu'il faut pour faire un remodelage et combien de temps il faut pour faire une transposition. Vous verrez que remodelez est trivial, aucune donnée n'est copiée et que la transposition prend une quantité de temps non triviale, elle copie des données.



0
votes

selon la documentation Python forte> 1 , 2 , il Il suffit de renverser le tableau (donc rend le vecteur 1-D linéaire TA. Ensuite, en utilisant l'indexation, il est renvoyé à une nouvelle matrice de taille définie. Par exemple:

start_array = 
[1,2,3,4;
5,6,7,8;
9,10,11,12]

i_a = [1,2,3,4,5,6,7,8,9,10,11,12] %implicit, not visible for user

result_array = 
[i_a(1), i_a(6), i_a(11); 
i_a(5), i_a(10), i_a(4); 
i_a(9), i_a(3), i_a(8); 
i_a(2), i_a(7), i_a(12)]


4 commentaires

Vous considérez maintenant vos éléments pour être majeurs de ligne; Ils ne sont pas, à la place, ils sont stockés (au moins dans Matlab, que la syntaxe que vous utilisez) dans l'ordre majeur de la colonne.


La commande de rangée ou de colonne est sans importance ici, cela ne montre que le concept. Je le basse sur la documentation officielle Python Scipy, dans Matlab, cela peut être fait d'autre manière.


Sous la cagoule, des tableaux numpus sont comme des matlabs, 1D, toujours. Cela change simplement la façon dont il traduit les indices 2D (dans ce cas) dans ce tableau 1D et comment il les affiche.


Devis de la documentation Vous pouvez penser à la remodelage comme d'abord de la flambée [...] puis de l'insérer [...] en utilisant le même type d'index . Donc, s'ils sont natifs stockés linéaires, cela ressemblait à une banalisation.



0
votes

La matrice la plus simple que vous puissiez remodeler est 2x2, mais vous aurez l'idée. (Désolé, Stackoverflow ne me laissera pas insérer d'images ni de latex, vous devez donc souffrir un peu pour lire ceci.)

Nous commençons par A = [[A, B], [C, D]] et nous voulons le remodeler dans un tableau 1x4: [[a, b, c, d]] . Vous pouvez faire cela algébraïque: xxx

* désigne la multiplication de matrice.

Chaque terme est un produit de matrices conformables: 1x2 * 2x2 * 2x4 qui vous donne un résultat de la forme 1x4 .

Le 1er terme vous donne [[A, 0,0 , 0]] , le 2e [[0, B, 0,0]] , le 3ème [[0,0, C, 0]] et le 4ème [[0,0,0, d]] .

généraliser ceci à une forme arbitraire de forme nxm ne devrait pas être trop difficile . Vous aurez besoin des termes n * m au lieu de 4, car votre matrice remodelée sera 1x (n * m) . Chaque terme devra être conforme, vous aurez donc besoin d'une matrice de forme 1xn pour frapper un de gauche et une matrice de forme mx (n * m) frapper un de droite.

Si vous devez remodeler une forme de forme nxm à une forme kxl , où k * l = n * m , vous devrez appuyer sur A à gauche avec kxn matrices et à partir de la droite avec mx (k * l) matrices.


0 commentaires