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!
Können Sie bitte die Einrückung korrigieren? – Nuageux
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