栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我不能在numpy中提升为负数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我不能在numpy中提升为负数?

在NumPy中,用于选择类似操作的输出

a_range ** s
dtype的逻辑基于dtype,而不是值。这意味着
a_range **-2
必须具有与相同的输出dtype
a_range ** 2

numpy.array([2]) ** 2
给出整数输出之类的东西很重要,这意味着
numpy.array([2]) **-2
必须给出整数或什么都不给出。他们什么也没捡。将整数提高为负整数幂是NumPy中的错误。

如果要浮点输出,请进行浮点输入:

a_range = np.arange(2, n + 1, dtype=float)

要么

a_range = np.arange(2, n + 1).astype(float)

从上面的描述中可能不会想到NumPy的类型规则的一些奇怪方面。一种是对于涉及标量和数组的操作,在使用输入dtypes选择结果dtype之前,实际上可以根据标量的dtype将其dtype降级:

>>> (numpy.array([1], dtype='int8') + numpy.int32(1)).dtypedtype('int8')>>> (numpy.array([1], dtype='int8') + numpy.array([1], dtype='int32')).dtypedtype('int32')

在这里,标量

numpy.int32(1)
被“降级”到int8,但数组不会降级。(实际上,这不仅比降级为int8还复杂,尤其是对于有符号/无符号处理;有关详细信息,请参见实现。)

其次,当涉及到uint64s时,NumPy突然看起来可以接受负指数:

>>> numpy.arange(5, dtype='uint64') ** -2__main__:1: RuntimeWarning: divide by zero encountered in powerarray([       inf, 1.        , 0.25      , 0.11111111, 0.0625    ])

这是因为NumPy无法找到足够大的整数dtype来容纳uint64值和负值,因此它放弃并将输入强制为浮点数。只要避免使用标量类型“降级”,对于带符号dtype的正指数,可以看到相同的结果:

>>> numpy.arange(5, dtype='uint64') ** numpy.array([2], dtype='int32')array([ 0.,  1.,  4.,  9., 16.])


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号