int64数组和int的总和是否应该通过int64类型检查?

时间:2019-07-17 06:59:11

标签: python numpy

我似乎偶然发现了一些奇怪的代码行为,并且不确定这是预期的还是错误的。当我添加从时间对象派生的int时,对int64的类型检查失败。

我可以将其范围缩小为字面量到时间对象的乘积:

import numpy, time

# base check works
ts = numpy.arange(10, dtype=numpy.int64)

print(type(ts[0]), " and should be numpy.int64 : ",  end = "")
if isinstance(ts[0], numpy.int64) : print("Check OK!")
else : print("Check FAILED!")

# time object works
ts = numpy.arange(10, dtype=numpy.int64) + int(round(time.time()))

print(type(ts[0]), " and should be numpy.int64 : ",  end = "")
if isinstance(ts[0], numpy.int64) : print("Check OK!")
else : print("Check FAILED!")

# float itself works
ts = numpy.arange(10, dtype=numpy.int64) + numpy.int64(round(1e9))

print(type(ts[0]), " and should be numpy.int64 : ",  end = "")
if isinstance(ts[0], numpy.int64) : print("Check OK!")
else : print("Check FAILED!")


# for some reason the multiplication of both does not work
ts = numpy.arange(10, dtype=numpy.int64) + int(round(time.time()*1e9))

print(type(ts[0]), " and should be numpy.int64 : ",  end = "")
if isinstance(ts[0], numpy.int64) : print("Check OK!")
else : print("Check FAILED!")

我的输出是:

<class 'numpy.int64'>  and should be numpy.int64 : Check OK!  
<class 'numpy.int64'>  and should be numpy.int64 : Check OK!     
<class 'numpy.int64'>  and should be numpy.int64 : Check OK! 
<class 'numpy.int64'>  and should be numpy.int64 : Check FAILED!  

上面的第一个检查工作都是应做的,因为据我了解,ts的dtype应该保持int64(而且确实如此)。

但是最后一次检查失败,即使dtype表示为int64。我不明白为什么。

我使用numpy1.16.4在python3.6.8上运行了代码。机器是64位的,因此自然int也应该是64位的,但是无论哪种方式都没有关系,因为我在numpy数组(AFAIK)中特别声明了int64。

我实际上有3台不同的机器,具有不同的python版本(python 3.5.3和numpy 1.16.2)和(3.6.8和1.16.2)产生相同的失败检查。其中一个甚至不是我自己设置的,而是一个托管系统。我相信这与我的本地安装无关。

0 个答案:

没有答案