Dans Python et Matlab, vous pouvez utiliser une fonction appelée 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? P> Remodape () code> pour modifier les dimensions de la matrice. P>
3 Réponses :
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
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 code> serait
[1 4; 2 5; 3 6] code>, 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 code>, 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 code> 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.
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)]
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 code>. Donc, s'ils sont natifs stockés linéaires, cela ressemblait à une banalisation.
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 Chaque terme est un produit de matrices conformables: Le 1er terme vous donne généraliser ceci à une forme arbitraire de forme Si vous devez remodeler une forme de forme A = [[A, B], [C, D]] code> et nous voulons le remodeler dans un tableau 1x4:
[[a, b, c, d]] code>. Vous pouvez faire cela algébraïque: p>
* code> désigne la multiplication de matrice. P>
1x2 * 2x2 * 2x4 code> qui vous donne un résultat de la forme
1x4 code>. p>
[[A, 0,0 , 0]] code>, le 2e
[[0, B, 0,0]] code>, le 3ème
[[0,0, C, 0]] code> et le 4ème
[[0,0,0, d]] code>. p>
nxm code> ne devrait pas être trop difficile . Vous aurez besoin des termes
n * m code> au lieu de 4, car votre matrice remodelée sera
1x (n * m) code>. Chaque terme devra être conforme, vous aurez donc besoin d'une matrice de forme
1xn code> pour frapper un de gauche et une matrice de forme
mx (n * m) code> frapper un de droite. p>
nxm code> à une forme
kxl code>, où
k * l = n * m code>, vous devrez appuyer sur A à gauche avec
kxn code> matrices et à partir de la droite avec
mx (k * l) code> matrices. p> p>
Avez-vous examiné les exemples de la
Remodape code> une documentation (MATLAB)?