对于python课程,我希望得到你的帮助。
定义一个函数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))
提前致谢!
答案 0 :(得分:0)
这适合你吗?
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))
输出
[ 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)
我创建的新xb
数组比我之前的x
与numpy.array_equal function
进行比较。