实际上,您在这里有多个不同的32位整数dtype。这可能是一个错误。
NumPy(偶然地?)创建了多个不同的带符号的32位整数类型,可能对应于C
int和
long。它们都显示为
numpy.int32,但实际上是不同的对象。在C级别,我相信类型对象是
PyIntArrType_Typeand在此处
PyLongArrType_Type生成的。
dtype对象具有
type对应于该dtype标量的type对象的属性。正是这种
type该属性NumPy的检查决定是否打印时
dtype在一个阵列的信息
repr:
_typelessdata = [int_, float_, complex_]if issubclass(intc, int): _typelessdata.append(intc)if issubclass(longlong, int): _typelessdata.append(longlong)...def array_repr(arr, max_line_width=None, precision=None, suppress_small=None): ... skipdtype = (arr.dtype.type in _typelessdata) and arr.size > 0 if skipdtype: return "%s(%s)" % (class_name, lst) else: ... return "%s(%s,%sdtype=%s)" % (class_name, lst, lf, typename)
在
numpy.arange(5)和
numpy.arange(5) + 3,
.dtype.type是
numpy.int_;
上
numpy.arange(5) // 3或
numpy.arange(5) % 3,
.dtype.type是其他32位有符号整数类型。
至于为什么
+并且
//具有不同的输出dtype,它们使用不同的类型解析例程。这是一个
//,而这是一个
+。
//的类型解析会寻找一个ufunc内部循环,该内环采用可以安全地将输入转换为输入
+的类型,而的类型解析将NumPy类型提升应用于参数,并选择与结果类型匹配的循环。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)