文章目录
在写python代码时,有时会用到isinstance
来做类型判断, isinstance()
可以判断两个类型是否相同,而且相对于type()
,isinstance()
会认为子类是一种父类类型,会考虑继承关系。
我们经常会将输入数据data (列表list格式) 转为numpy格式,有时在后面对data进行类型判断,这时就要明确numpy的默认类型了,并且要知道python中的整型和numpy中的整型的区别。这是一个很容易出BUG的地方。
1. python中的整型(int)和numpy中的整型(np.int, np.int64)类型是不一样的
a=np.array([1,2,3])
print('1',type(a))
print('2',a.dtype)
print('3',isinstance(a[0],int)) #判断numpy.int64是否为python的int类型;结果为False
#numpy转换其他整数类型
a=a.astype(np.int8)
print('4',a.dtype)
print('5',isinstance(a[0],int)) #判断numpy.int8是否为python的int类型;结果为False
输出结果:
1 <class 'numpy.ndarray'>
2 int64
3 False
4 int8
5 False
2. python中的浮点型(float)和numpy中的浮点型(np.float64)类型一样,但是和np.float32不一样
python中的float和np.float、np.float64都是C类型的double
a=np.array([1.0,2.0,3.0])
print('1',type(a))
print('2',a.dtype)
print('3',isinstance(a[0],float)) #判断numpy.float64是否为python的int类型;结果为True
#numpy转换其他浮点类型
a=a.astype(np.float32)
print('4',a.dtype)
print('5',isinstance(a[0],float)) #判断numpy.float32是否为python的int类型;结果为False
输出结果:
1 <class 'numpy.ndarray'>
2 float64
3 True
4 float32
5 False