2012-04-07 13 views
1

Ich habe eine Reihe von benutzerdefinierten Objekten. Wie kann ich ein neues Array mit den Werten bestimmter Attribute dieser Objekte erhalten?Zugreifen auf Eigenschaften von Objekten in einem numplien Array

Beispiel:

import numpy as np 

class Pos(): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

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

# Magic line 
xy_arr = .... # arr[ [arr.x,arr.y] ] 

print xy_arr 
# array([[0,1], 
     [2,3], 
     [4,5]]) 

Ich möchte hinzufügen, dass meine Motive für eine solche Operation ist das Zentrum der Masse der Objekte in dem Array zu berechnen.

+2

Gibt es einen Grund, warum Sie Arrays dafür verwenden? Dies ist nicht wirklich, wie numpy Arrays verwendet werden sollen, und ihre Verwendung ist normalerweise mühsamer und langsamer als die Verwendung von Python-Listen. –

+0

Ich benutzte ein Array für seine Indizierung. Ich habe float-Array 'A' mit der gleichen Form wie 'arr' und muss Elemente aus' arr' basierend auf einem Schwellenwert in 'A' auswählen – ajwood

Antwort

1

Normalerweise, wenn ich mehrere Mengen habe, die zusammengehören, und ich von Numpys Indexierungskraft profitieren möchte, verwende ich Record-Arrays. Vorsicht, wenn Sie viele Operationen zum Anhängen/Entfernen ausführen, könnte numpy in Bezug auf die Geschwindigkeit eher unwirksam sein.

Wenn ich Ihr Kommentar richtig verstanden hat, dies ist ein Beispiel, wo zwei Werte um ein Drittel ausgewählt sind:

import numpy as np 

# create a table for your data 
dt = np.dtype([('A', np.double), ('x', np.double), ('y', np.double)]) 
table = np.array([(1,1,1), (2,2,2), (3,3,3)], dtype=dt) 

# define a selection mask 
selection = table['A'] > 1.5 
columns = ['x', 'y'] 

print table[selection][columns] 

Ein schöner Nebeneffekt ist, dass diese Tabelle Speicher h5py ist sehr einfach und bequem wie Ihre Daten ist bereits beschriftet.

Verwandte Themen