Comment ajouter une colonne d'une matrice?
Ok, imaginez que j'ai cette Matrice: {{1,2},{2,3}}, et je préfère avoir {{4,1,2},{5,2,3}}. C'est, j'ai ajouté une colonne de la matrice. Est-il un moyen facile de le faire?
Ma meilleure proposition est celle-ci:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
mais il obscurcit le code et nécessite constamment le chargement de plus en plus de code. N'est-ce pas construit en quelque sorte?
4 réponses
depuis ArrayFlatten
a été introduit dans Mathematica 6 la solution la moins brouillée doit être
matrix = {{1, 2}, {2, 3}}
vector = {{4}, {5}}
ArrayFlatten@{{vector, matrix}}
une bonne astuce est que remplacer n'importe quel bloc de matrice par 0
vous donne un bloc zéro de la bonne taille.
je crois que le moyen le plus courant est de transposer, de préparer et de transposer à nouveau:
PrependColumn[vector_List, matrix_List] :=
Transpose[Prepend[Transpose[matrix], vector]]
je pense que la façon la moins obscure est la suivante:
PrependColumn[vector_List, matrix_List] := MapThread[Prepend, {matrix, vector}];
en général, MapThread
est la fonction que vous utiliserez le plus souvent pour des tâches comme celle-ci (je l'utilise tout le temps en ajoutant des étiquettes aux tableaux avant de les formater joliment avec Grid
), et il peut rendre les choses beaucoup plus clair et concis à utiliser Prepend
au lieu de l'équivalent Prepend[#1, #2]&
.
THE... ABSOLUMENT.. DE LOIN... Méthode la plus rapide pour ajouter ou préparer une colonne de mes tests de diverses méthodes sur le tableau RandomReal[100,{10^8,5}]
(les enfants, ne l'essayez pas à la maison... si votre machine n'est pas construite pour la vitesse et la mémoire, les opérations sur un tableau de cette taille sont garanties pour accrocher votre ordinateur)
...est-ce que c'est: Append[tmp\[Transpose], Range@Length@tmp]\[Transpose]
.
Remplacer Append
par Prepend
à volonté.
la prochaine chose la plus rapide est celle - ci: Table[tmp[[n]]~Join~{n}, {n, Length@tmp}]
- presque deux fois plus lent.