python数据分析基础之Numpy库详解
Posted 温柔且上进c
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据分析基础之Numpy库详解相关的知识,希望对你有一定的参考价值。
Numpy库基础
安装numpy库
- 直接安装:
pip install numpy
- 换源安装
pip install numpy -i https://pypi.douban.com/simple
- 或者使用python集成环境anaconda进行安装
numpy介绍
- NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和 随机数生成等功能
Numpy数组对象
numpy中主要操作的对象就是多维数组(ndarray),该数组由两部分组成:
实际的数据
描述这些数据的元数据
而大部分的数组操作仅仅修改元数据部分,而不是修改底层的实际数据
NumPy中的数组一般是同质的(但有一种特殊的数组类型例外,它是异质的),即数组中的所有元素类型必须是一致的。这样有一个好处:如果我们知道数组中的元素均为同一类型,该数组所需的存储空间就很容易确定下来
-
与Python中一样,NumPy数组的下标也是从0开始的。数组元素的数据类型用专门的对象表示
-
我们使用numpy中的arange函数创建数组,并获取其数据类型
import numpy as np
one_arr=np.arange(5)
one_arr.dtype
- 数组one_arr的数据类型为int32(在我的机器上是这样),当然如果你使用64位的Python,得到的结果可能是int64。不论是哪种情形,该数组的数据类型都是整数(64位或32位)。除了数据类型,数组的维度也是重要的属性
上述例子演示了怎样创建一个向量(即一维的NumPy数组)。向量在数学中很常用,但
大部分情况下,我们需要更高维的对象。先来确定一下刚刚所创建向量的维度:
one_arr.shape
- 上图所示:这是一个包含5个元素的向量,取值分别为0~4的整数。数组的shape属性返回一个元组(tuple),元组中的元素即为NumPy数组每一个维度上的大小。上面例子中的数组 是一维的,因此元组中只有一个元素
创建多维数组
我们已经知道如何创建向量,现在可以试着创建多维的NumPy数组,并查看其维度
- 创建多维数组
two_arr=np.array([np.arange(2),np.arange(2)])
two_arr
- 查看其维度
two_arr.shape
-
在上面,我们将arange函数创建的数组作为列表元素,把这个列表作为参数传给array函数,从而创建了一个2×2的数组,而且没有出现任何报错信息
-
array函数可以依据给定的对象生成数组。给定的对象应是类数组,如Python中的列表。在上面的例子中,我们传给array函数的对象是一个NumPy数组的列表。像这样的类数组对象是array函数的唯一必要参数,其余的诸多参数均为有默认值的可选参数
获取数组中的元素
-
在这里我们就使用上面创建的
two_arr
二维数组进行演示 -
在创建这个多维数组时,我们给array函数传递的对象是一个嵌套的列表。现在来依次选取该数组中的元素。记住,数组的下标是从0开始的
a=two_arr[0,0]
a
- 上述就是从数组中或取元素。对于数组two_arr来说,只需要用two_arr[m,n]选取各数组元素,其 中m和n为元素下标,对应的位置如下表所示:
Numpy数据类型
-
Python支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此NumPy添加了很多其他的数据类型。在实际应用中,我们需要不同精度的数据类型,它们占用的内存空间也是不同的。在NumPy中,大部分数据类型名是以数字结尾的,这个数字表示其在内存中占用的位数
-
如下图所示
类型 | 描述 |
---|---|
bool | 用一位存储的布尔类型(值为TRUE或FALSE) |
inti | 由所在平台决定其精度的整数(一般为int32或int64) |
int8 | 整数,范围为-128至127 |
int46 | 整数,范围为-32768至32767 |
int32 | 整数,范围为-231至231-1 |
int64 | 整数,范围为-263至263-1 |
uint8 | 无符号整数,范围为0至255 |
uint16 | 无符号整数,范围为0至65535 |
uint32 | 无符号整数,范围为0至232-1 |
uint64 | 无符号整数,范围为0至264-1 |
float16 | 半精度浮点数(16位):其中用1位表示正负号,5位表示指数,10位表示尾数 |
float32 | 半精度浮点数(32位):其中用1位表示正负号,8位表示指数,23位表示尾数 |
float64或float | 半精度浮点数(64位):其中用1位表示正负号,11位表示指数,52位表示尾数 |
complex64 | 复数,分别用两个32位浮点数表示实部和虚部 |
complex128或complex64 | 复数,分别用两个64位浮点数表示实部和虚部 |
- 每一个数据类型均有对应的类型转换函数:
- 上述即为一部分numpy的数据类型转换函数
- 在NumPy中,许多函数的参数中是可以指定数据类型,通常这个参数是可选的:
arr=np.arange(7,dtype=np.uint16)
- 需要注意的是,复数是不能转换为整数的,这将触发TypeError错误:
- 同样,复数也不能转换为浮点数。不过,浮点数却可以转换为复数,注意,有j的部分为复数的虚部
数据类型对象
- 数据类型对象是
numpy.dtype
类的实例。如上所述,NumPy数组是有数据类型的,更确切 地说,NumPy数组中的每一个元素均为相同的数据类型。数据类型对象可以给出单个数组元素在内存中占用的字节数,即dtype类的itemsize属性
:
two_arr.dtype.itemsize
two_arr.dtype
Numpy字符编码
- NumPy可以使用
字符编码
来表示数据类型,这是为了兼容NumPy的前身Numeric。不推荐使用字符编码,但有时会用到,因此在下面还是列出了字符编码的对应表。我们在使用Numpy时应该优先使用dtype对象来表示数据类型,而不是这些字符编码
数据类型 | 字符编码 |
---|---|
整数 | i |
无符号整数 | u |
单精度浮点数 | f |
双精度浮点数 | d |
布尔值 | b |
复数 | D |
字符串 | S |
unicode字符串 | U |
void (空) | V |
- 下面使用字符编码出创建numpy数组:
- 创建一个单精度浮点数数组:
a=np.arange(7,dtype='f')
- 也可创建一个复数数组
a=np.arange(7,dtype='D')
自定义数据类型
有很多种自定义数据类型的方法,以浮点型为例:
- 可以使用Python中的浮点数类型:
np.dtype(float)
- 可以使用字符编码来指定单精度浮点数类型:
np.dtype('f')
- 可以使用字符编码来指定双精度浮点数类型:
np.dtype('d')
- 还可以将两个字符作为参数传给数据类型的构造函数。此时,第一个字符表示数据类型, 第二个字符表示该类型在内存中占用的字节数(2、4、8分别代表精度为16、32、64位的浮点数):
np.dtype('f8')
- 完整的Numpy数据类型列表可以在
sctypeDict.keys()
中找到:
np.sctypeDict.keys()
dtype类的属性
- dtype类有很多有用的属性。例如,我们可以获取数据类型的字符编码:
a=np.dtype('f8')
a.char
- type属性对应于数组元素的数据类型:
a.type
- str属性可以给出数据类型的字符串表示,该字符串的首个字符表示字节(endianness), 后面如果还有字符的话,将是一个字符编码,接着一个数字表示每个数组元素存储所需的字节数。 这里,字节序是指位长为32或64的字(word)存储的顺序,包括大端(bigendian)和小端序 (little-endian)。大端序是将最高位字节存储在最低的内存地址处,用>表示;与之相反,小端序 是将最低位字节存储在最低的内存地址处,用<表示:
a.str
创建自定义数据类型
- 自定义数据类型是一种异构数据类型,可以当做用来记录电子表格或数据库中一行数据的结构。作为示例,我们将创建一个学生信息的数据类型。其中,我们用一个长度40个字 符的字符串来记录学生名称,用一个32位的整数来记录学生的年龄,最后用个32位的单精 度浮点数来记录学生的身高 。下面是具体的步骤:
创建数据类型:
t = np.dtype([('name', np.str_, 40), ('age', np.int32), ('height',np.float32)])
t
- 查看数据类型(也可以查看某一字段的数据类型) :
t['age']
- 在用array函数创建数组时,如果没有在参数中指定数据类型,将默认为浮点数类型。而现在,我们想要创建自定义数据类型的数组,就必须在参数中指定数据类型,否则将触发TypeError错误:
student=np.array([('ycx',18,165.6),('fbl',22,188.8)],dtype=t)
student[1]
以上是关于python数据分析基础之Numpy库详解的主要内容,如果未能解决你的问题,请参考以下文章