2017-09-08 3 views
2

Ich habe ein Tupel, das viele Tupel enthält. Jedes Tupel in meinem Haupttupel hat zwei Elemente: Das erste Element ist ein Array mit einer Form von (700,) und das zweite Element ist eine ganze Zahl.Tupel von Arrays innerhalb eines Tupels verketten

Hier ist eine kleine Darstellung meiner Tupel:

x =((np.array[3,3,3],1), (np.array[4,4,4],2), (np.array[5,5,5],3)) 

Ich bin auf der Suche alle Arrays in eine große Matrix zu kombinieren und alle ganzen Zahlen in einen Spaltenvektor, die alle in einem Tupel passen.

So soll mein Ausgang so etwas wie diese:

y= (np.array([[3,3,3],[4,4,4], [5,5,5]]), np.array([1,2,3])) 

Ein Tupel mit dem ersten Elemente als Array mit Form (3,3), und das zweite Element als Array mit einer Form (3,)

Ich nehme an, wir können eine von numpy Stack-Methoden verwenden, aber ich kann nicht meinen Kopf um, wie Sie auf alle Elemente der Tupel zugreifen, um dies zu tun.

Vielen Dank.

+0

So würde die Ausgabe eine regelmäßige 3x4 förmige Anordnung sein, nicht wahr? – Divakar

+0

Nein die Ausgabe wäre ein Tupel mit zwei Arrays - 3x3 und eine 3. Hoffentlich macht das Sinn. – Moondra

+0

Können Sie die tatsächlich erwartete Ausgabe aufschreiben, weil das, was Sie gezeigt haben, nicht gültig ist. – Divakar

Antwort

3
>>> x = ((np.array([3,3,3]),1), (np.array([4,4,4]),2), (np.array([5,5,5]),3)) 
>>> y = (np.array([e for e, _ in x]), np.array([i for _, i in x])) 
(array([[3, 3, 3], 
     [4, 4, 4], 
     [5, 5, 5]]), array([1, 2, 3])) 

Oder ohne Comprehensions:

>>> map(np.array, zip(*x)) 
[array([[3, 3, 3], 
     [4, 4, 4], 
     [5, 5, 5]]), array([1, 2, 3])] 
+0

Map funktioniert hier hervorragend, +1. Ich lösche meine Antwort, da das OP sein Beispiel von Listen in Arrays geändert hat. –

+0

Eine Listenverständnisversion der 'map':' [np.array (i) für i in zip (* x)] '. Der Schlüssel ist, dass 'zip (* x)' effektiv eine Liste 'transpose' ist. – hpaulj

1

A Structured Array-Ansatz:

Zuerst wird das Tupel, mit korrigierten Syntax:

In [392]: x =((np.array([3,3,3]),1), (np.array([4,4,4]),2), (np.array([5,5,5]),3)) 

Input strukturierten Array ist eine Liste von Tupeln, wobei jedes Tupel Daten für eine record enthält:

In [393]: arr=np.array(list(x), np.dtype('3i,i')) 
In [394]: arr 
Out[394]: 
array([([3, 3, 3], 1), ([4, 4, 4], 2), ([5, 5, 5], 3)], 
     dtype=[('f0', '<i4', (3,)), ('f1', '<i4')]) 

Zugriff auf das Array von Feldnamen:

In [395]: arr['f0'] 
Out[395]: 
array([[3, 3, 3], 
     [4, 4, 4], 
     [5, 5, 5]], dtype=int32) 
In [396]: arr['f1'] 
Out[396]: array([1, 2, 3], dtype=int32) 

oder als Tupel von Feldern:

In [397]: (arr['f0'], arr['f1']) 
Out[397]: 
(array([[3, 3, 3], 
     [4, 4, 4], 
     [5, 5, 5]], dtype=int32), array([1, 2, 3], dtype=int32)) 
Verwandte Themen