2017-12-15 1 views
-1

Meine ND-Matrix ist X mit Abmessungen (2536,72) ist ein Objekttyp. Ich möchte den Typ in float 64 ändern, aber bevor ich Zeilen mit? Löschen muss.Wie lösche Zeilen von einem NDarray-Objekt, wenn Werte innerhalb gleich sind?

Ich habe diesen Code verwendet, aber es funktioniert nicht - Jeder Vorschlag>

import numpy as np 
X1=np.delete(X,'?',axis=0) 

__main__:2: DeprecationWarning: using a non-integer array as obj in delete will result in an error in the future 
Traceback (most recent call last): 

    File "<ipython-input-89-34091147b19c>", line 2, in <module> 
    X1=np.delete(X,'?',axis=0) 

    File "/anaconda3/envs/py36/lib/python3.6/site-packages/numpy/lib/function_base.py", line 4865, in delete 
    obj = obj.astype(intp) 

ValueError: invalid literal for int() with base 10: '?' 

für das bitte ??

Antwort

0

numpy.delete funktioniert nur mit Zahlen, so X1=np.delete(X,'?',axis=0) wird nicht funktionieren (? ist keine Nummer). Sie müssen Ihre erste Matrix mit Python-Listenmethoden iterieren, eine neue Liste erstellen und sie dann in numpyfloat Array konvertieren. so etwas wie diese (nicht genau):

x1 = [] 
for l in x: 
    if not l.__contains__('?'): 
     x1.append(l) 
+0

Mehrdad, danke. Mit diesem Code erstellt Python ein NDarray-Objekt (72,) und eine Matrix X1 mit 1848 Zeilen. Der oben beschriebene Code funktioniert (meine letzte Antwort) –

0

Versuchen Sie dieses Stück Code:

rows_to_delete = []     # a list of all rows to delete 
for i in range(0, 3536):    # looping through rows 
    for j in range(0, 72):   # scanning all columns in each row 
     if (X[i][j] == '?'): 
      rows_to_delete.append(i) 
      break 

for i in range(len(rows_to_be_deleted)): # deleting unwanted lines 
    numpy.delete(X, (i), axis = 0) 
+0

Ich habe diese coderows_to_delete = [] # eine Liste aller zu löschenden Zeilen verwendet für i im Bereich (0, 2536): # durch die Zeilen für j im Bereich (0, 72): # Scannen alle Spalten in jeder Zeile if (X [i] [j] ==) '?': rows_to_delete.append (i) Pause für i im Bereich (len (rows_to_delete)): # Löschen unerwünschter Zeilen np.delete (X, (i), Achse = 0) –

+0

Sie haben gerade numpy mit np gewechselt, weil Sie es zuvor als np importiert haben. (import numpy als np) so ist es das gleiche. Hoffe das enthüllt es. – abdullah

+0

mit dem letzten Code geschrieben X1-Matrix erstellen funktioniert perfekt. Danke –

0

rows_to_delete = [] # eine Liste aller Zeilen for i in range zu löschen (0, 2536) : # Durchlaufen der Zeilen für j im Bereich (0, 72): # Scannen aller Spalten in jeder Zeile if (X [i] [j] == '?'): rows_to_delete.append (i) break

f oder i im Bereich (len (rows_to_delete)): # Löschen von unerwünschten Zeilen np.delete (X, (i), Achse = 0) X1 = np.delete (X, rows_to_delete, axis = 0) # erstellt neue Matrix X1 mit unerwünschten Linien

Verwandte Themen