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库详解的主要内容,如果未能解决你的问题,请参考以下文章

python数据分析基础之Numpy库详解

python数据分析基础之Numpy库详解

python数据分析基础之Numpy库详解

python数据分析基础之Numpy库详解

学机器学习,不会数据分析怎么行?之NumPy详解

python基础之numpy.reshape详解