2017-05-09 6 views
0

Für einen Pythonkurs möchte ich deine Hilfe für eine Aufgabe.Konvertiere und überprüfe den Array-Datentyp

Definieren Sie eine Funktion check_conversion, die als Eingabe zwei Parameter verwendet: ein Array und einen Datentyp. Die Funktion sollte einen booleschen Wert zurückgeben, der angibt, ob alle Elemente im ursprünglichen Array verlustfrei in den angegebenen Datentyp konvertiert werden können.

Im Moment habe ich diesen Code, aber es gibt True auf jeden Eingang zurück. Wir können nur numpy library verwenden, das ist eine Einschränkung. Ich überlege das wahrscheinlich und es wird eine viel einfachere Lösung geben.

import numpy 
def check_conversion(x, d_type): 


x = numpy.array([x], dtype= d_type) 
dtype = "" 

x_float32 = x.astype('float32') 
x_float64 = x.astype('float64') 
x_int = x.astype('int') 
x_un_int64 = x.astype('uint64') 

print(x, x.dtype) 
print(x_int, x_int.astype) 
print(x_float32, x_float32.dtype) 


if numpy.all(x) == numpy.all(x_float32): 
    return True 


elif numpy.all(x) == numpy.all(x_float64): 
    return True 


elif numpy.all(x) == numpy.all(x_int): 
    return True 


elif numpy.all(x) == numpy.all(x_un_int64): 
    return True 

else: 
    return False 

a = numpy.array([3., 3.2, 1]) 
data_type_a = "int" 
print(check_conversion(a, data_type_a)) 
b = numpy.array([3., 3.2, -1]) 
data_type_b = "float32" 
print(check_conversion(b, data_type_b)) 
c = numpy.array([3., 3.2, -1]) 
data_type_c = "float64" 
print(check_conversion(c, data_type_c)) 
d = numpy.array([3, 2, -1]) 
data_type_d = "uint64" 
print(check_conversion(d, data_type_d)) 

Vielen Dank im Voraus!

+0

Können Sie bitte die Einrückung korrigieren? – Nuageux

+0

Hallo, ich nehme an, du verstehst falsch, wie 'np.all' funktioniert. Es gibt "True", wenn alle Elemente eines Arrays "True" und "False" sind. Hier werden "0" und "0.0" als "Falsch" betrachtet und alle anderen Zahlen werden als "Wahr" betrachtet. Ihre Vergleiche überprüfen nur, ob beide Arrays Nullen enthalten oder nicht. Sie müssen Ihre Bedingungen in 'numpy.all (x == x_float32)' ändern. Außerdem möchten Sie nur den Datentyp überprüfen, der im Funktionsaufruf angegeben ist. Atm Sie nur für Float32 überprüfen und wenn das funktioniert, geben Sie "True" Ende weiterhin überprüfen elseway. – jotasi

Antwort

0

Passt das zu Ihnen?

import numpy 

def check_conversion(x, d_type): 
    xb = numpy.array(x, dtype= d_type) 
    print x, xb 
    if numpy.array_equal(x, xb): 
     return d_type, True 
    return d_type, False 

a = numpy.array([3., 3.2, 1]) 
data_type_a = "int" 
print(check_conversion(a, data_type_a)) 
b = numpy.array([3., 3.2, -1]) 
data_type_b = "float32" 
print(check_conversion(b, data_type_b)) 
c = numpy.array([3., 3.2, -1]) 
data_type_c = "float64" 
print(check_conversion(c, data_type_c)) 
d = numpy.array([3, 2, -1]) 
data_type_d = "uint64" 
print(check_conversion(d, data_type_d)) 

Ausgabe

[ 3. 3.2 1. ] [3 3 1] 
('int', False) 
[ 3. 3.2 -1. ] [ 3.   3.20000005 -1.  ] 
('float32', False) 
[ 3. 3.2 -1. ] [ 3. 3.2 -1. ] 
('float64', True) 
[ 3 2 -1] [     3     2 18446744073709551615] 
('uint64', False) 

Ich bin ein neues xb Array erstellen, als ich mit numpy.array_equal function vorherigen x zu vergleichen bin.

+0

@Naugeux Danke! Stack Overflow ist großartig haha. Niemals so schnell beantwortet – gerlof92

+0

Schnelle Antwort hängt vom Problem ab;) Fühlen Sie sich frei, Ihre Frage als beantwortet zu markieren – Nuageux

Verwandte Themen