2017-08-10 4 views
0

Ich habe ein Array mit Werten von 0-5, und ich möchte numpy.where() verwenden, um die Indizes zu erhalten, wo das Element gleich 1 ist, aber Es gibt ein leeres Array zurück.numpy.where() gibt leere Liste zurück, wenn Element die Bedingung erfüllt

Code:

hf = h5py.File(PATH+'/data.h5', 'r') 
data = hf['data']     #dtype int32 [0,1,2,3,4,2,3,1,1,1,4,5,6] 
print(data[1] == 1)     #prints True 
indices = np.where(data == 1)[0]  #ERROR here - returns empty array 

Antwort

1

Sie haben den Datensatz herunterladen Tests wie diese auf sie auszuführen.

eine Testdatei hängt die ich unter Verwendung der Umgebung:

In [318]: f = h5py.File('data.h5') 
In [319]: list(f.keys()) 
Out[319]: ['dset', 'dset1', 'vset'] 
In [320]: f['dset'] 
Out[320]: <HDF5 dataset "dset": shape (3, 5), type "<f8"> 

Ich kann Index und ein einzelnes Element testen, oder Scheibe des Datensatz

In [321]: f['dset'][1] 
Out[321]: array([ 1., 1., 1., 1., 1.]) 
In [322]: f['dset'].shape 
Out[322]: (3, 5) 
In [323]: f['dset'][...] 
Out[323]: 
array([[ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1.]]) 

Aber ein boolean-Test auf dem Datensatz nicht Arbeit:

In [324]: f['dset']>0 
... 
TypeError: unorderable types: Dataset() > int() 

==1 funktioniert, aber die Daten-Set-Objekte mit 1 vergleicht, und unweigerlich zurückkehren s False. Deshalb where Sie ein leeres Resultat ergibt:

In [325]: f['dset']==1 
Out[325]: False 

das Element für Element Test tun ich den Datensatz 'index' haben:

In [326]: f['dset'][...]>0 
Out[326]: 
array([[ True, True, True, True, True], 
     [ True, True, True, True, True], 
     [ True, True, True, True, True]], dtype=bool) 
+0

ich es gelöst, indem es auf sich ändernde: 'data = hf ['Daten'] [::] '. Danke :) Ich muss ein paar Minuten warten, bevor ich deine Antwort annehmen kann. – matchifang

+0

Ich glaube, dass Sie auch 'np.array' auf dem HDF5-Datenmengenobjekt aufrufen können, um ein numpiges Array zu erstellen. – Praveen

+0

Ich würde 'f ['dset']. Value' über' np.array (f ['dset']) 'empfehlen. In jedem Fall müssen wir uns bewusst sein, dass es einen Unterschied zwischen dem "Datensatz" und dem Array im Speicher gibt. – hpaulj

Verwandte Themen