Python机器学习(三十六)NumPy 数据类型

Posted 大码王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python机器学习(三十六)NumPy 数据类型相关的知识,希望对你有一定的参考价值。

NumPy提供的数值类型,数值范围比Python提供的数值类型更大。NumPy的数值类型,如下表所示:

SN数据类型描述
1 bool_ 布尔值,取值ture/false,占用一个字节
2 int_ 是integer的默认类型。与C语言中的long类型相同,有可能是64位或32位。
3 intc 类似于C语言中的整数类型(int),表示32位或64位的整型。
4 intp 表示用于索引的整数。
5 int8 8位整数,值的范围是-128到127。
6 int16 2字节(16位)整数。范围是-32768到32767。
7 int32 4字节(32位)的整数。范围是-2147483648到2147483647。
8 int64 8字节(64位)整数。范围是-9223372036854775808到9223372036854775807。
9 uint8 1字节(8位)无符号整数。
10 uint16 2字节(16位)无符号整数。
11 uint32 4字节(32位)无符号整数。
12 uint64 8字节(64位)无符号整数。
13 float_ 与float64相同。
14 float16 半精度浮点数。5位保留给指数,10位保留给尾数,1位保留给符号。
15 float32 单精度浮点数。8位保留给指数,23位保留给尾数,1位保留给符号。
16 float64 双精度浮点数。指数保留11位,尾数保留52位,符号保留1位。
17 complex_ 与complex128相同。
18 complex64 复数,实数和虚数各占32位。
19 complex128 复数,实数和虚数各占64位。

上述所有数值类型,都可由dtype描述。

NumPy 数据类型对象(dtype)

数据类型对象/dtype,是描述数组中元素数据类型的对象。具体内容包括:

  • 数据类型(整数、浮点数或Python对象)
  • 数据长度
  • 字节顺序(小端或大端)
  • 在结构化类型中,字段名称、字段数据类型等。
  • 如果数据类型是子数组,则会包含其形状和数据类型

字节顺序由数据类型的前缀(‘<‘或’>’)决定。‘<‘表示小端,’>’表示大端。

我们可以使用以下语法,创建一个dtype对象。

numpy.dtype(object, align, copy) 

参数:

  • object: 要转换为dtype类型的对象。
  • align: 布尔值。如果为真,则添加额外的填充,使其等效于C结构体
  • copy: 创建一个新的dtype对象副本。如果为false,则结果是对内置数据类型对象的引用

示例

import numpy as np 
dt = np.dtype(np.int32) 
print(dt)

输出

int32

示例

#int8, int16, int32, int64 等价于字符串 ‘i1‘, ‘i2‘,‘i4‘, etc. 
import numpy as np 

dt = np.dtype(i4)
print(dt)

输出

int32

示例

# 使用字节顺序标记
import numpy as np 
dt = np.dtype(>i4) 
print(dt)

输出

>i4

创建结构化数据类型

我们可以创建类似字典的数据类型,包括字段名与字段值。

下面的示例展示了结构化数据类型的使用。

示例

# 先创建结构化数据类型
import numpy as np 
dt = np.dtype([(age,np.int8)]) # 格式是:[(‘字段名‘, 字段类型)]
print(dt) 

输出

[(age, i1)] 

示例

# 现在将它应用到ndarray对象
import numpy as np 

dt = np.dtype([(age,np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a) 

输出

[(10,) (20,) (30,)]

示例

# 字段名可用于访问列的内容
import numpy as np 

dt = np.dtype([(age,np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a[age])

输出

[10 20 30]

示例

下面的示例定义了一个名为student的结构化数据类型,其中包含字符串字段“name”、整数字段“age”和浮点字段“marks”。然后将此dtype应用于ndarray对象。

import numpy as np 
student = np.dtype([(name,S20), (age, i1), (marks, f4)]) 
print(student)

输出

C:Anaconda3python.exe "C:Program FilesJetBrainsPyCharm 2019.1.1helperspydevpydevconsole.py" --mode=client --port=63681
import sys; print(Python %s on %s % (sys.version, sys.platform))
sys.path.extend([C:\app\PycharmProjects, C:/app/PycharmProjects])
Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
Type copyright, credits or license for more information
IPython 7.12.0 -- An enhanced Interactive Python. Type ? for help.
PyDev console: using IPython 7.12.0
Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] on win32
runfile(C:/app/PycharmProjects/ArtificialIntelligence/test.py, wdir=C:/app/PycharmProjects/ArtificialIntelligence)
[(name, S20), (age, i1), (marks, <f4)]
import numpy as np 

student = np.dtype([(name,S20), (age, i1), (marks, f4)]) 
a = np.array([(abc, 21, 50),(xyz, 18, 75)], dtype = student) 
print(a)

输出

[(abc, 21, 50.0), (xyz, 18, 75.0)]

每个内置数据类型都有一个唯一标识它的字符代码。

  • ‘b’ − boolean
  • ‘i’ − (signed) integer
  • ‘u’ − unsigned integer
  • ‘f’ − floating-point
  • ‘c’ − complex-floating point
  • ‘m’ − timedelta
  • ‘M’ − datetime
  • ‘O’ − (Python) objects
  • ‘S’, ‘a’ − (byte-)string
  • ‘U’ − Unicode
  • ‘V’ − raw data (void)

以上是关于Python机器学习(三十六)NumPy 数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Python机器学习(三十四)Numpy 介绍

Python机器学习(三十九)基于数值区间创建数组

Python机器学习(四十六)NumPy 排序查找计数

机器学习系列(三十六)——回归决策树与决策树总结

机器学习100天(三十六):036 朴素贝叶斯

机器学习面试题