0
votes

Match Vecteurs à Matrix Python

Je suis nouveau à Python et à la programmation en général.

Je veux créer une matrice de 2 vecteurs par exemple lorsque j'ai A = [1, 2, 3] et B = [4, 5, 6] Je veux obtenir une matrice qui a les mêmes lignes dans les vecteurs, mais les vecteurs sont dans des colonnes séparées. m = [[1, 4], [2, 5], [3, 6]]

Je cherche une méthode Comment faire cela car j'ai des vecteurs plus complexes dans mon code puis dans mon Exemple. Je veux faire la même chose pour les vecteurs probabilité_of_winning et probabilité_of_losing. xxx

merci beaucoup à l'avance


0 commentaires

3 Réponses :


1
votes
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
d = [10, 11, 12]

def horizontal_matrices(*args):
    res = []
    for i in range(len(args[0])):
        col = []
        for j in args:
            col.append(j[i])
        res.append(col)
    return res


print(horizontal_matrices(a, b, c, d))
# [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]

1 commentaires

Cela n'utilise pas numpy .



1
votes

Vous allez ici: xxx

sortie: xxx


1 commentaires

Pourquoi préallocate puis appendez-vous? Si vous prévenez, sélectionnez la taille finale immédiatement, puis affectez des valeurs au tableau par indexation.



1
votes

Simplement pythonique et un style numpy, ne nécessitant pas Toutes les boucles , Ajout ou autres opérations coûteuses: xxx

fonctionne également pour des types mixtes et de grandes quantités de vecteurs, Fi A et b étant np.arrays et C et d étant Python Liste S: xxx

au lieu de np.vstack (tableaux) .t plus général np.stack ( tableaux, axe = 1) peut également être utilisé.


6 commentaires

Merci pour l'exemple. C'est beaucoup plus court que les autres suggestions. Quand j'essaie de le faire de la même manière: des tableaux = (probabilité_of_winning, probabilité_of_losing) matrix_of_probabilities = np.vstack (tableaux) .t Il affiche uniquement la première ligne de la matrice. Je ne sais pas pourquoi, car le tableau capture chaque élément de mes vecteurs de flotteur.


Je vous en prie! Il est également plus pythonic car cela évite les boucles (règle de programmation de Python de base: Évitez les boucles dans la mesure du possible. Les boucles sont lentes et laids), retourne une matrice numpue et devrait être beaucoup plus rapide en général que des boucles explicites et ajoutées . :)


J'ai toujours un problème. Dans votre exemple, je reçois exactement la matrice que je veux, mais quand je l'essaie de mon vecteur de flotteur, en les ajoutant d'abord dans un tuple, puis en utilisant np.stack (tableaux) .t je n'ai pas la matrice pour chaque élément du flotteur Vecteur mais seulement le premier. Savez-vous ce que j'ai besoin de changer?


Je ne comprends pas ce que tu veux dire. Qu'est-ce que a et b ressemble? Seulement a est float? Et quelle sortie obtenez-vous?


Pour A et B, je veux utiliser la probabilité flotte_of_winning et probabily_of_losing à partir du code que j'ai entré dans la question. Lorsque j'utilise alpha = 0.5 et utilisez les codes que vous obtenez alors je reçois NP.vstack (tableaux) .t = ([0,05, 0,95]) mais avec cette matrice n'est pas complétée car les flotteurs ont une longueur de 99


Vos vecteurs de probabilité sont de ndim == 3 , il peut donc être lié à la fausse indexation? Parce que np.vstack (tableaux) .t fonctionne pour votre code. Essayez d'avoir serré vos vecteurs de probabilité ou le résultat d'empilement: np.vstack (tableaux) .t.squeeze () . Si cela ne résout pas le problème, veuillez ouvrir une nouvelle question avec une entrée et une sortie détaillées et envoyez-moi le lien.