问题是,当您在一个操作中使用不同的类型时,NumPy会提升这些类型。float32仅当另一个数值操作数的数据类型为:float32或更少

int16或更少

uint16或更少

如果另一个操作数有另一个数据类型,则结果将是float64(如果另一个操作数很复杂,则为complex)。上面列出的数据类型不是最常见的类型,所以几乎所有的操作(特别是当另一个是Python整数/浮点)使用标准运算符+,-,/,*。。。将您的float32提升为float64。在

不幸的是,要避免这种情况你无能为力。在很多情况下,纽比这样做是可以的,因为:大多数体系结构可以像单精度浮点一样处理双精度。Python中的算术操作在Python类型上运行得很快,但在其他类型上运行较慢。在import numpy as np

a32 = np.float32(1)

a64 = np.float64(1)

a = 1.

%timeit [a32 + a32 for _ in range(20000)] # 100 loops, best of 3: 4.58 ms per loop

%timeit [a64 + a64 for _ in range(20000)] # 100 loops, best of 3: 4.83 ms per loop

%timeit [a + a for _ in range(20000)] # 100 loops, best of 3: 2.72 ms per loopPython类型的开销非常大,以至于标量双精度浮点的内存开销几乎可以忽略不计。在

^{pr2}$

但是,如果你有巨大的数组,而你在其他方面遇到内存问题,或者你与其他库交互(机器学习、GPU等等),那么使用单精度浮点是有意义的。在

但正如上面提到的,你几乎总是要反对强制规则,这会防止你遇到意想不到的问题。在

带有int32 + float32的例子实际上是一个很好的例子!您希望结果是float32-但是有一个问题:不能将every int32表示为float32:np.iinfo(np.int32(1)) # iinfo(min=-2147483648, max=2147483647, dtype=int32)

int(np.float32(2147483647)) # 2147483648

np.int32(np.float32(2147483647)) # -2147483648

是的,只要把这个值转换成一个单精度浮点,再转换回一个整数,它就改变了它的值。这就是NumPy使用双精度的原因,这样您就不会得到一个意外的结果!这就是为什么您需要强制NumPy做一些可能出错的事情(从一般用户的角度来看)。在

因为没有办法(据我所知)限制纽比的类型推广,你必须自己发明。在

例如,您可以创建一个类来包装NumPy数组,并使用特殊方法实现运算符的dtype-d函数:import numpy as np

class Arr32:

def __init__(self, arr):

self.arr = arr

def __add__(self, other):

other_arr = other

if isinstance(other, Arr32):

other_arr = other.arr

return self.__class__(np.add(self.arr, other_arr, dtype=np.float32))

def __sub__(self, other):

other_arr = other

if isinstance(other, Arr32):

other_arr = other.arr

return self.__class__(np.subtract(self.arr, other_arr, dtype=np.float32))

def __mul__(self, other):

other_arr = other

if isinstance(other, Arr32):

other_arr = other.arr

return self.__class__(np.multiply(self.arr, other_arr, dtype=np.float32))

def __truediv__(self, other):

other_arr = other

if isinstance(other, Arr32):

other_arr = other.arr

return self.__class__(np.divide(self.arr, other_arr, dtype=np.float32))

但这只实现了NumPy功能的一小部分,并将很快导致许多可能被遗忘的代码和边缘情况。现在可能有更好的方法使用^{}或{a2},但我自己没有使用过这些方法,因此我无法对工作量或适用性发表评论。在

因此,我的首选解决方案是为需要的函数创建助手函数:import numpy as np

def arr32(a):

return np.float32(a)

def add32(a1, a2):

return np.add(a1, a2, dtype=np.float32)

def sub32(a1, a2):

return np.subtract(a1, a2, dtype=np.float32)

def mul32(a1, a2):

return np.multiply(a1, a2, dtype=np.float32)

def div32(a1, a2):

return np.divide(a1, a2, dtype=np.float32)

或者只使用就地操作,因为这些操作不会提升类型:>>> import numpy as np

>>> arr = np.float32([1,2,3])

>>> arr += 2

>>> arr *= 3

>>> arr

array([ 9., 12., 15.], dtype=float32)

python中浮点单精度用什么表示_不方便在numpy中使用单精度浮点相关推荐

  1. python多个日志模块怎么隔离_在多个模块中使用Python日志logging

    最好的做法是在每个模块中都有一个像这样定义的logging器: import logging logger = logging.getLogger(__name__) 靠近模块的顶部,然后在模块的其他 ...

  2. python中num函数是什么意思_如何理解python3函数中num的用法?

    首先,给大家讲述下什么是num?其实num就是函数numpy的缩写,想必大家听到这,心里会浮现这个函数的基础用法了吧,那大家想不想了解使用num的时候,一些常见的使用操作,方便大家在项目里使用的方法呢 ...

  3. python诞生的时间地点人物事件_教程|计算任意视频中各人物的出镜时间(附Python实现)...

    ,内容略有删改 前言 简介 当我开始接触深度学习时,学到的第一件事就是图像分类.这个话题非常有趣,包括我在内的很多人都沉浸在它的魅力之中.但是在我处理图像分类时总会思考,如果我能将学到的东西迁移到视频 ...

  4. python 获取行列号两个数组相等_python – 寻找在numpy中找到两个相等长度数组之间精确重叠的最快方法...

    我正在寻找最佳(最快)的方法来找到numpy中两个数组之间的确切重叠.给定两个数组x和y x = array([1,0,3,0,5,0,7,4],dtype=int) y = array([1,4,0 ...

  5. qt中如何模拟按钮点击_如何快速在 Shopify 中加入按钮

    假如你会 `CSS` , `HTML` , `JS` 三件套,那么修改 `Shopify` 代码将不会太难(毕竟一个模板中的代码量还是挺多的,除非深入研究了代码,不然改起来还是会比较麻烦的). 但挺多 ...

  6. javascript中打印对象显示[object object]_扒一扒JavaScript中不常见的一些object

    前言 今天仔细阅读了MDN的这篇guide:Using XMLHttpRequest,在里面发现了好多以前听都没听过的概念,尤其是那些不为人知的Object,所以在这里特地把它们拎出来讲一下,不求多深 ...

  7. mysql中为表增加外键_如何在Excel 2013中为符号分配键盘快捷键

    mysql中为表增加外键 We've previously shown you how to add keyboard shortcuts to symbols in Word 2013 to mak ...

  8. python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...

    根据我使用的 Python安装,我在加载模块时遇到了一些问题.当我输入 from quantecon import approx_markov 在使用Python 3.4.0的终端中,返回以下错误消息 ...

  9. python安装后cmd找不到_关于Python3.6环境中,virtualenv找不到命令的解决方法

    今天收到一个网友的提问,说是,已经安装好了,Python3.6,系统环境变量也检查过,没有问题,在系统CMD命令行窗口,输入python可以返回当前安装的python环境的版本号,如下图 python ...

最新文章

  1. Shell 输入/输出重定向
  2. 【小练习06】HTML+CSS--电影公告
  3. 关于从EXCEL中导入到SQL server中的问题
  4. ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)
  5. c语言字符串替换问题,C语言中的字符串替换
  6. 自动化测试框架-pytest框架入门篇
  7. python小白从哪来开始-python入门小白的困惑,怎么入门python?
  8. thinkphp 接收小程序json数组
  9. 请认真使用没有后悔药的parted分区工具
  10. vue富文本编辑器中上传图片
  11. 通过hosts文件配置域名ip
  12. Excel零基础入门(真对2021版Excel)
  13. 云服务器ECS是什么
  14. C++实现鼠标左键点击关闭控制台
  15. 信道容量迭代算法验证
  16. 有关Nodejs的视频教程
  17. 2021.8-机器学习地震信号去噪和到时识取环境配置
  18. 仿牛客社区项目笔记-帖子模块(核心)
  19. vue+echarts实现仪表盘
  20. 二、final和static关键字,接口和抽象类

热门文章

  1. MATLAB车道偏离检测,车道线检测
  2. 移动端(五)flexible.js + rem适配布局
  3. c++函数形参名省略问题
  4. 【coling 2020】Attentively Embracing Noise for Robust Latent Representation in BERT
  5. ❤️思维导图整理大厂面试高频数组14: 最大子序积 和 最大子序和 的不同之处, 力扣152❤️
  6. HydraNet——特斯拉自动驾驶强大的人工智能神经网络模型
  7. java3d bezier曲面_使用Bezier曲面渲染飘动的红旗
  8. 信用卡什么原因会被冻结
  9. SQL server 是一门什么语言
  10. 从头开始学Tableau-第十二章(实战3 地图实践)