2017-09-08 1 views
0

Ich versuche ein numpliges Array mit 2 Spalten und mehreren Zeilen zu erstellen. Die erste Spalte soll Eingangsvektor der Größe darzustellen 3. Die zweite Säule soll darstellen Ausgangsvektor der Größe 2.Numpy: Ordnungsgemäße Anordnung von Eingabe- und Ausgabevektoren

arr = np.array([ 
    [np.array([1,2,3]), np.array([1,0])] 
    [np.array([4,5,6]), np.array([0,1])] 
]) 

ich erwartet hatte: arr[:, 0].shape zurückzukehren (2, 3), aber es gibt (2,)

Was ist der richtige Weg, um Eingabe und Ausgabe Vektoren in eine Matrix mit numpy?

+2

Ich denke, es ist eine schlechte Idee, die Zeilenlänge nicht übereinstimmen. Was ist dein Anwendungsfall? – nos

+0

Einfaches neuronales Netzwerk. Die erste Spalte repräsentiert Eingabemerkmale. Die zweite Spalte repräsentiert die Ausgangswahrscheinlichkeiten. – coolscitist

Antwort

1

Wenn Sie sicher sind die Elemente in jeder Spalte die gleiche Größe/Länge haben, können Sie auswählen und dann das Ergebnis Stack mit numpy.row_stack:

np.row_stack(arr[:,0]).shape 
# (2, 3) 

np.row_stack(arr[:,1]).shape 
# (2, 2) 
0

Also, den Code

arr = np.array([ 
[np.array([1,2,3]), np.array([1,0])], 
[np.array([4,5,6]), np.array([0,1])] 
]) 

Erzeugt Ein Objekt-Array, das die erste Spalte indexiert, gibt Ihnen zwei Zeilen mit jeweils einem Objekt zurück, das die Größe berücksichtigt. Zu bekommen, was Sie wollen, Sie brauchen würde, es in etwas zu wickeln wie

np.vstack(arr[:, 0]) 

die ein Array aus den Objekten in der ersten Spalte erzeugt. Das ist nicht sehr praktisch, wäre es mehr Sinn für mich diese in einem Wörterbuch zu speichern, so etwas wie

io = {'in': np.array([[1,2,3],[4,5,6]]), 
'out':np.array([[1,0], [0,1]]) 
} 

Ein strukturiertes Array gibt Ihnen ein bisschen von beidem. Schaffung ist ein bisschen schwierig, für das Beispiel gegeben,

arr = np.array([ 
    (1,2,3), (1,0)), 
    ((4,5,6), (0,1)) ], 
    dtype=[('in', '3int64'), ('out', '2float64')]) 

Erzeugt ein strukturiertes Array mit Feldern in und out, bestehend aus 3 ganzen Zahlen sind und jeweils 2 schwimmt. Zeilen können wie gewohnt zugegriffen werden,

In[73]: arr[0] 
Out[74]: ([1, 2, 3], [ 1., 0.]) 

Oder durch den Feldnamen

In [73]: arr['in'] 
Out[73]: 
array([[1, 2, 3], 
    [4, 5, 6]]) 

Das numpy Handbuch viele weitere Details hat (https://docs.scipy.org/doc/numpy-1.13.0/user/basics.rec.html). Ich kann keine Details hinzufügen, da ich sie seit einiger Zeit in einem Projekt verwenden möchte, aber nicht.

Verwandte Themen