Je n'ai pas été en mesure de comprendre cela. Merci pour toute aide:
Have:
>>> z = [[(1,2),(3,4)],[(5,6),(7,8)]] >>> z [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
Want:
>>> x = np.array([[1,2],[5,6]])
>>> x
array([[1, 2],
[5, 6]])
>>> y = np.array([[3,4],[7,8]])
>>> y
array([[3, 4],
[7, 8]])
6 Réponses :
Si vous voulez parcourir les lignes de chaque matrice, vous pouvez faire ceci:
[ [tuple(row1),tuple(row2)] for (row1, row2) in zip(x,y) ]
Cela vous donnera un générateur (si vous l'enveloppez dans une fonction), mais vous voulez une liste. Alors à la place, enveloppez-le dans une compréhension:
for (row1, row2) in zip(x,y):
yield [tuple(row1), tuple(row2)]
# [ (1,2) , (3,4) ]
vous devez spécifier que la version yield doit être à l'intérieur d'une définition de fonction
x = list([[1,2],[5,6]]) y = list([[3,4],[7,8]]) x [[1, 2], [5, 6]] y [[3, 4], [7, 8]] z=list(zip(x,y)) z [([1, 2], [3, 4]), ([5, 6], [7, 8])]
Merci, mais cela produit une liste de tuples de listes, pas une liste de listes de tuples comme demandé.
Essayez ceci:
[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
Résultat:
x_z = map(tuple,x) y_z = map(tuple,y) [list(i) for i in zip(x_z, y_z)]
Merci, cela ressemble à la solution la plus simple.
IIUC
z=np.array([x,y]) [list(map(tuple,z[:,x]))for x in range(len(x))] Out[223]: [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
Pour ce que ça vaut, voici la solution la plus simple et la plus efficace (mais probablement la moins généralisée):
[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
Résultat:
result = [[(x[0,0], x[0,1]), (y[0,0], y[0,1])],
[(x[1,0], x[1,1]), (y[1,0], y[1,1])]]
Certes, cela ne généralise pas, mais la question est - dans quelle direction la généralisation est-elle nécessaire? Dimension extérieure plus longue? Dimension intérieure plus longue? La question n'a appelé à aucune généralisation.
Sur la base d'une exigence explicitement énoncée, cette solution peut bien sûr être modifiée pour la généraliser autant que nécessaire . P >
C'est un problème amusant. Voici ce que j'ai trouvé:
[(array([1, 2]), array([3, 4])), (array([5, 6]), array([7, 8])]
En gros, zipper x et y vous permet:
print([list(map(tuple, i)) for i in zip(x, y)]) # [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
et donc vous convertissez chaque élément en premier dans une liste, puis un tuple
Double possible de Convertir le tableau numpy en tuple