-1
votes

Utilisation de Python à Zip et à la liste des fonctions pour combiner deux matrices 2D pour produire des coordonnées X, Y?

J'ai deux matrices 2D chacune des dimensions 831 x 918. Si:

matrice A = [[[A (1,1), A (1,2), ...], [A (2 , 1), A (2,2) ...]] Matrice B = [[[B (1,1), B (1,2), ...], [B (2,1), B (2,2) ...]]

Je voudrais combiner les deux matrices pour créer une liste avec ((A (1,1), B (1,1)), (A (1,2), B (1,2)), ...) .

Quelle est la meilleure façon de faire cela? J'ai essayé d'utiliser les fonctions zip et list comme indiqué ci-dessous: xxx

Cependant, cela renvoie une liste de 831 éléments longs, mais chaque position sur la liste a beaucoup d'éléments. Je veux seulement avoir un point unique (x, y) pour chaque élément de la liste, pas un tableau entier.

Merci pour toute aide. Edit: comme exemple de base, pour: A = [[1,2,3], [4,5,6], [7,8,9]] B = [[10,11,11], [13,14,15], [16,17,18]]

Je veux obtenir une liste à la tracé de ((1,10), (2,11), (3,12), ...).


3 commentaires

Pouvez-vous partager un exemple spécifique et une sortie attendue?


a (2,2) apparaît deux fois dans matrice A; Est-ce une faute de frappe?


Typo fixe et exemple avec une sortie attendue ajoutée. Merci.


3 Réponses :


0
votes

Si vous avez deux tableaux de la même forme comme: xxx pré>

Vous pouvez effectuer cette opération pour obtenir une liste avec les paires d'éléments dans la même position P>

[(a_, b_) for a_, b_ in zip(a.flatten(), b.flatten())]


2 commentaires

Vous pouvez également remplacer le zip avec np.stack ((aplatten (), b.flatten ()), axis = -1)


Ouais, et vous devriez remodeler plus tard, mais ça a l'air plus propre, merci



0
votes

Si les deux sont des tableaux numpus, vous pouvez utiliser des fonctions et des méthodes pure numpy:

import numpy as np

A = np.arange(1, 10).reshape(3,3)
B = np.arange(10, 19).reshape(3,3)

pairs = np.stack((A,B), axis=2).reshape(-1, 2)
"""
array([[ 1, 10],
   [ 2, 11],
   [ 3, 12],
   [ 4, 13],
   [ 5, 14],
   [ 6, 15],
   [ 7, 16],
   [ 8, 17],
   [ 9, 18]])
"""


0 commentaires

0
votes

Vous pouvez y parvenir comme ... Convertissez A et B sur l'objet NP de la forme = (813 918), puis

 result = np.vstack((A[0],B[0])).T


0 commentaires