2010-07-21 5 views
1

Je rencontre un problème pour l'assemblage de deux réseaux. Supposons que j'ai deux tableaux:Splicing NumPy Arrays

a = array([1,2,3]) 
b = array([4,5,6]) 

Quand je vstack((a,b)) je reçois

[[1,2,3],[4,5,6]] 

et si je hstack((a,b)) je reçois:

[1,2,3,4,5,6] 

Mais ce que je veux vraiment est:

[[1,4],[2,5],[3,6]] 

Comment est-ce que j'accomplis ceci sans employer pour des boucles (il doit être rapide)?

+0

double possible de [Comment puis-je itérer sur les tuples des éléments de deux ou plusieurs listes en Python?] (Http://stackoverflow.com/questions/1210396/how-do-i-iterate- over-the-tuples-of-the-items-of-two-more-lists-in-python) [comment puis-je parcourir deux listes en parallèle en Python?] (http://stackoverflow.com/questions/1663807/how-i-iterate-through-two-lists-in-parallel-in-python-closed) –

+0

Aucun doublon; les autres threads ne sont pas liés à numpy. – Philipp

+1

Je suis curieux de savoir pourquoi vous avez accepté la réponse de Philipp, quand elle était identique à, et soumise plus tard que, la réponse d'Amber? – mtrw

Répondre

0

J'ai oublié comment transposer les tableaux numpy, mais vous pouvez faire:

at = transpose(a) 
bt = transpose(b) 

result = vstack((a,b)) 
+0

La transposition de tableaux unidimensionnels est une opération d'identité. – Philipp

+0

N'hésitez pas à corriger la syntaxe. Comme je l'ai dit, j'ai oublié comment transposer un tableau numpy. –

0
>>> c = [list(x) for x in zip(a,b)] 
>>> c 
[[1, 4], [2, 5], [3, 6]] 

ou

>>> c = np.array([list(x) for x in zip(a,b)]) 
>>> c 
array([[1, 4], 
     [2, 5], 
     [3, 6]]) 

en fonction de ce que vous cherchez.

+1

Cette question concerne les tableaux NumPy, pas les listes. – Amber

+0

@Amber - 'zip' semble toujours fonctionner avec les tableaux. – mtrw

+0

Oui, mais il sera probablement plus lent que les bonnes fonctions NumPy. – Amber

0
numpy.vstack((a, b)).T