2016-10-29 1 views
3

Ich lerne Python und ich habe ein wenig Probleme beim Umgang mit einem Objekt. Ich habe versucht, nach einer Lösung zu suchen, aber sie hat nirgendwohin geführt, also frage ich euch.Wie transformiere ich ein Objekt in ein Array

Ich möchte die ersten X-Spalten eines Objekts, aber ich kann nicht, da es nicht die gleiche Größe in jeder Zeile hat.

Ich habe dieses Objekt:

array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52], 
     [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55], 
     [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51], 
     [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object) 

Und ich würde so etwas wie dies lernen:

array([[45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [50, 51, 52, 55]]) 

Was könnte ich dies tun zu lösen? Danke für Ihre Hilfe

Alvaro

+1

Sie haben ein 1d 4 Element Array von 'dtype = object'. Jedes Element ist eine Liste. Dies ist im Grunde das Gleiche wie eine Liste von Listen; und es ist normalerweise am besten, es so zu behandeln. Der Array-Wrapper fügt nicht viel hinzu und kann die Vorgänge sogar verlangsamen. – hpaulj

Antwort

3

Was

import numpy as np 
data = np.array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52], 
       [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55], 
       [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51], 
       [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object) 
newData = np.array([d[:4] for d in data]) 
+0

Danke, das funktioniert! Denkst du, es gibt einen Weg, es ohne ein zu tun? Zum Beispiel wie eine Array-Funktion oder etwas ähnliches? –

0

Sie können eine generische Lösung benötigen, wo Sie auch die Anzahl der Zeilen specifiy lassen sich wie folgt:

import numpy as np 

arr = np.array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52], 
     [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55], 
     [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51], 
     [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object) 

def slice_array(arr, num_cols, num_rows=None): 
    if num_rows: 
     return np.array([row[:num_cols] for row in arr[:num_rows]]) 
    return np.array([row[:num_cols] for row in arr]) 

res1 = slice_array(arr, 4, 2) 
res2 = slice_array(arr, 4) # Like in your case 

Ergebnisse:

>>> res1 
array([[45, 45, 45, 50], 
     [45, 45, 45, 50]]) 
>>> res2 
array([[45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [50, 51, 52, 55]]) 
Verwandte Themen