加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Numpy 数据类型

发布时间:2023-07-01 15:06:42 所属栏目:教程 来源:
导读:本小节将详述 Numpy 内置的数据类型,以及如何在创建数组对象时进行灵活指定、如何查看创建好的数组类型、以及如何更改数据类型。

1. 常见数据类型
Numpy 支持的数据类型比 Python 内置的要多很多,而这也是 Num
本小节将详述 Numpy 内置的数据类型,以及如何在创建数组对象时进行灵活指定、如何查看创建好的数组类型、以及如何更改数据类型。

1. 常见数据类型
Numpy 支持的数据类型比 Python 内置的要多很多,而这也是 Numpy 如此灵活和强大的原因之一。

例如对于整数,在 Numpy 中,根据整数的位数不同所需要占据的空间大小不同,又对整数类型进行类细分,常见地可以分为 int8、int16、int32、int64 等等。

Numpy 支持的常用数据类型如下:

类型    说明
int8、uint8    分别表示有符号和无符号的8位整型,可表示的整数范围为-128 ~ 127、0 ~ 255
int16、uint16    分别表示有符号和无符号的16位整型,可表示的整数范围为-32768 ~ 32767、0 ~ 65535
int32、uint32    分别表示有符号和无符号的32位整型,可表示的整数范围为-2147483648 ~ 2147483647、0 ~ 4294967295
int64、uint64    分别表示有符号和无符号的64位整型,可表示的整数范围为-9223372036854775808 ~ 9223372036854775807、0 ~ 18446744073709551615
float16、float32、float64、float128    分别表示半精度浮点数、单精度浮点、双精度浮点、扩展精度浮点数
complex64、complex128、complex256    分别用两个32位、64位、128位的浮点数表示的复数
bool    存储True和False值的布尔类型
Object    Python对象类型
string_    类型代号S,固定长度的字符串类型,每个字符1个字节。例如,如果需要创建一个长度为10的字符串,应使用S10。
unicode_    类型代号U,固定长度的unicode类型,跟字符串的定义方式一样,例如(U8)

2. 定义数据类型
dtype 是一个特殊的对象,在该对象中定义了 ndarray 的数据类型与数据大小。通常我们在创建 ndarray 的时候,可以显示地利用 dtype 定义数组的细节信息。

案例
在创建数组对象的时候,通过给 dtype 赋值,显式地定义一个 int8 类型的数组。

import numpy as np
 
arr0 = np.array([[,,], [,,]], dtype=np.int8)arr0
Out:array([[, , ],[, , ]], dtype=int8)
在创建数组对象的时候,通过给 dtype 赋值,显式地定义一个 float16 类型的数组

arr1 = np.array([[, -, ], [-, , -]], dtype=np.float16)arr1
Out:array([[ , -,  ],[-. ,  , -]], dtype=float16)
在创建数组对象的时候,通过给 dtype 赋值,显式地定义一个 S2 字符串类型的数组

arr2 = np.array(list('ABCD'), ndmin=, dtype='S2')arr2
Out:array([[b'A', b'B', b'C', b'D']], dtype='|S2')
在创建数组对象的时候,通过给 dtype 赋值,显式地定义布尔类型的数组

arr3 = np.array([[-,,-], [,-,]], dtype=np.bool)arr3
Out:array([[ True, False,  True],   [ True,  True,  True]])

3. 查询数据类型
同样的,对于已经定义好数组,也可以通过调用 dtype 对象,查看其数据类型。

案例
逐个查看上面定义的数组的数据类型:

arr0.dtype
Out:dtype('int8')
arr1.dtype
Out:dtype('float16')
arr2.dtype
Out:dtype('S2')
arr3.dtype
Out:dtype('bool')

4. 更改数据类型
对于已经定义好的数组,也可以通过 ndarray 的 astype 方法对 dtype 对象进行修改。

案例
将整数类型的数组转换成浮点数类型,并查看转换之后的结果:

float_arr0 = arr0.astype(np.float)float_arr0.dtype
Out:dtype('float64')
可以看到,在我们不指定具体的浮点数精度的时候,Numpy 也会自动去推断一个合理的类型(当然,很多时候并不是最优的类型,因此在处理大数据集时,建议定义完整)。

如果把浮点数转换成整数,则小数部分将会被截断舍弃。

int_arr1 = arr1.astype(np.int8)int_arr1
array([[ , -,  ],   [-,  , -]], dtype=int8)
对于字符串类型的数组,在某些情况是可以与浮点数进行转换的,例如:

string_arr4 = np.array([['1.2', '2.8'], ['4.3', '5.7']], dtype=np.string_)string_arr4.astype(np.float16)
Out:array([[, ],   [, ]], dtype=float16)
需要注意的是,astype 并非全能,在某些情况下,如果转换过程失败,则会引发一个ValueError。例如:

string_arr4.astype(np.int16)
ValueError                                Traceback (most recent call last)<ipython-input--> in <module>---->  string_arr4.astype(np.int16)ValueError: invalid literal for int() with base : '1.2'
通过观察上面的案例,我们会发现,利用 astype 方法会创造出一个新的数组。确实 astype 方法并不能在原有的数组上进行修改,因此如果你想保存改变后的数组,务必记得给它赋个值。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章