转换并检查数组数据类型

时间:2017-05-09 11:35:16

标签: python arrays numpy type-conversion

对于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))

提前致谢!

1 个答案:

答案 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数组比我之前的xnumpy.array_equal function进行比较。