gpt4 book ai didi

python - 为什么在使用 NumPy 进行楼层划分时会显示数据类型(即使它是 native 数据类型)?

转载 作者:太空狗 更新时间:2023-10-29 21:45:15 26 4
gpt4 key购买 nike

通常 dtype 等同于原生类型时会被隐藏:

>>> import numpy as np
>>> np.arange(5)
array([0, 1, 2, 3, 4])
>>> np.arange(5).dtype
dtype('int32')

>>> np.arange(5) + 3
array([3, 4, 5, 6, 7])

但不知何故,这不适用于底除法或取模:

>>> np.arange(5) // 3
array([0, 0, 0, 1, 1], dtype=int32)
>>> np.arange(5) % 3
array([0, 1, 2, 0, 1], dtype=int32)

为什么会有差异?

Python 3.5.4、NumPy 1.13.1、Windows 64 位

最佳答案

这里实际上有多个不同的 32 位整数数据类型。这可能是一个错误。

NumPy 已经(不小心?)创建了多个不同的有符号 32 位整数类型,可能对应于 C intlong。它们都显示为 numpy.int32,但它们实际上是不同的对象。在 C 级别,我相信类型对象是 PyIntArrType_TypePyLongArrType_Type,生成 here .

dtype 对象有一个 type 属性对应于该 dtype 标量的类型对象。 NumPy inspects 正是这个 type 属性在决定是否在数组的 repr 中打印 dtype 信息时:

_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.typenumpy .int_;在 numpy.arange(5)//3numpy.arange(5) % 3 上,.dtype.type 是另一个 32-位符号整数类型。

至于为什么+//有不同的输出数据类型,它们使用不同的类型解析例程。 Here's //here's + 的那个。 // 的类型解析寻找一个 ufunc 内部循环,该循环采用输入可以安全转换为的类型,而 + 的类型解析将 NumPy 类型提升应用于参数并选择与结果类型匹配的循环。

关于python - 为什么在使用 NumPy 进行楼层划分时会显示数据类型(即使它是 native 数据类型)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com