Pythonコースでは、私はあなたの助けを借りたいと思います。配列データ型を変換してチェックする
imputとして配列とデータ型の2つのパラメータをとる関数check_conversionを定義します。この関数は、初期配列内のすべての要素が無損失で特定のデータ型に変換できるかどうかを示すブール値を返す必要があります。
私はこのコードを持っていますが、すべての入力でTrueを返します。私たちはnumpyライブラリしか使えないので、これは制約です。 私はこれを恐れているでしょうし、はるかに簡単な解決策があります。
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))
ありがとうございます!
字下げを修正できますか? – Nuageux
こんにちは、 'np.all'がどのように動作しているのか誤解していると思います。配列のすべての要素がTrueおよびFalseの場合はTrueを返します。ここで、「0」と「0.0」は「False」とみなされ、他のすべての数字は「True」とみなされます。あなたの比較は、両方の配列にゼロが入っているかどうかだけをチェックします。条件を 'numpy.all(x == x_float32)'に変更する必要があります。また、関数呼び出しで与えられたデータ型だけをチェックしたいだけです。 Atmではfloat32だけをチェックし、それが有効であれば 'True'を返し、elsewayを続行します。 – jotasi