首页 > 其他分享 >Numpy中数据类型转换的tips

Numpy中数据类型转换的tips

时间:2023-12-25 11:13:50浏览次数:63  
标签:类型转换 float64 数据类型 astype 数组 np tips Numpy float32

在逛Stack Overflow时看见一个关于numpy的浮点数据转换的问题比较有趣,现当作tips记录下来。问题原地址

我们知道,在numpy中,浮点数据同python本身一样,是用双精度(float64)来存储数据的,而Pytorch或者其他的一些框架中,为了节省运算量,其浮点是用单精度(float32)来存储数据的,因此需要用到数据转换。下例是一个数据转换的操作。

l = np.array([0., 0., 0.])

for i in range(len(l)):
    l[i] = l[i].astype(np.float32)

print(l[0].dtype)

# >>> float64

在该部分代码中,ndarray数组l的数据默认为float64,于是遍历其中每一个元素将其更改为float32。但是在更改完后,取出数组中的第0个值发现其数据类型仍为float64。为什么会造成这种原因,我们用下列例子演示一下:

l = np.array([0., 0., 0.])
a = l[0]
b = l[1]
c = l[2]

a = a.astype(np.float32)
b = b.astype(np.float32)
c = c.astype(np.float32)
print("a的数据类型:", a.dtype)


l[0] = a
l[1] = b
l[2] = c

print("数组中a的数据类型:", l[0].dtype)

# >>> a的数据类型: float32
# 	  数组中a的数据类型: float64

这里从列表l中取出了第一个值赋值给a,改变a的数据类型为float32,打印后a的数据类型的确变为了float32。但是再将其放入数组中后,它的数据类型又变回了float64。因此我们可以发现,数组本身的数据类型决定了数组中每一个元素的数据类型。数组l的数据类型为float64,其中每个元素的数据类型都为float64,即使更改了所有元素的数据类型。可以用下列例子验证。

l = np.array([0., 0., 0.])
l = np.float32(l)  # 将数组更改为float32
a = l[0]
b = l[1]
c = l[2]

a = a.astype(np.float64)
b = b.astype(np.float64)
c = c.astype(np.float64)
print("a的数据类型:", a.dtype)


l[0] = a
l[1] = b
l[2] = c

print("数组中a的数据类型:", l[0].dtype)

# >>> a的数据类型: float64
#     数组中a的数据类型: float32

标签:类型转换,float64,数据类型,astype,数组,np,tips,Numpy,float32
From: https://www.cnblogs.com/ToryRegulus/p/17925700.html

相关文章

  • numpy、scipy、pandas、matplotlib的读书报告
    1、NumpyNumPy(NumericalPython)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:一个强大的N维数组对象ndarray。广播功能函数。整合C/C++/Fortran代码......
  • [CSharpTips]C# 设置应用程序开机自启动
    C#设置应用程序开机自启动主要是通过动态生成vbs脚本,放置在系统自启动目录下,系统开机时会自动执行vbs脚本启动应用程序开机自启动,自动生成vbs脚本 using(StreamWriterfile=newStreamWriter($@"{Environment.GetFolderPath(Environment.SpecialFolder.Startup)}\StartU......
  • numpy、scipy、pandas、matplotlib的读书报告
    1、基本函数用法Numpy:基础的数学计算模块,来存储和处理大型矩阵,比Python自身的嵌套列表(nestedliststructure)结构要高效的多,本身是由C语言开发。这个是很基础的扩展,其余的扩展都是以此为基础。数据结构为ndarray,一般有三种方式来创建。numpy.array()#创建数组。numpy.ara......
  • 数据类型转换的坑
    请求其他服务的接口,返回的数据类型为Map<String,Object>其中的某个key对应的Object中的类型为Double,于是在解析时直接用(Double)value进行强制类型转换然而啊然而后来被调用服务有所改动,Double类型变为Integer,于是出现强制类型转换错误为了避免此种情况出现,最好的办法是将......
  • [软件使用] Visual Studio项目开发实用Tips
    作者:丶布布1.查看项目调用的库路径: 在调试时,通过工具栏上的调试—窗口—模块,可以看到自己调用库对应的路径或者按下Ctrl+Alt+U,会弹出Modules,就可以查看你调用的dll的路径当出现更新库文件之后,仍然存在问题,可通过此方法判断更新的库存放的路径是否正确2.VS2015Release生成......
  • [C++] 强制类型转换(dynamic_cast和dynamic_Pointer_cast)
    作者:丶布布1、指引或者引用的向上转换,向下转换例如基类Father,Son继承Father,派生类Son.。Father—>Son则为向下转换,Son—>Father则为向上转换。向上转换为隐士转换,向下转换需要dynamic_cast或者c的转换方式。向上转换:structFather{//基类Father};structSon:Father{//......
  • [C++ 从入门到精通] 6.static_cast、dynamic_cast等显示类型转换
    作者:丶布布文章预览:一.隐式类型转换二.显式类型转换(强制类型转换)static_cast显示转换dynamic_cast显示转换const_cast显示转换reinterpret_cast显示转换三.总结一.隐式类型转换含义:隐式类型转换:系统自动进行,不需要开发人员介入。intm=3+45.6;//48因为返回的int型......
  • # yyds干货盘点 # 盘点一个numpy库版本报错的问题
    大家好,我是皮皮。一、前言前几天在Python白银交流群【YVONNE......
  • ModuleNotFoundError: No module named 'numpy'解决方案
    1.使用numpy提示ModuleNotFoundError:Nomodulenamed'numpy' 2.切换到Python的安装路径下面想要安装numpy模块,报错提示“Unknownoption:ignore-installed“”Unknownorunsupportedcommand'install'” 3.看到有大佬说要切换到Scripts文件夹下面下载numpy,但是发现还......
  • Day04类型转换
    类型转换注意点:1.不能对布尔值进行转换2.不能把对象类型转换为不相干的类型3.在把高容量转换到低容量的时候,强制转换4.转换的时候可能存在内存溢出,或者精度问题!高转低,强制转换;低转高,自动转换低------------------------------------------->高byte,short,char->int-......