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?

11
demandé sur Alexey Popkov 2009-08-07 17:46:29

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.

11
répondu Janus 2010-02-16 16:59:52

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]]
7
répondu dreeves 2009-08-08 03:00:05

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]& .

7
répondu Pillsy 2010-06-24 15:18:10

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.

0
répondu Greg K 2011-09-25 18:36:05