python数据分析复盘——数据分析相关库之Numpy
1.1 numpy简介
(1)numpy是以矩阵为基础的计算模块,纯数学。用来进行各种计算。
(2)numpy是一个开源的Python科学计算基础库,包含:
• 一个强大的N维数组对象 ndarray
• 广播功能函数
• 整合*C/C++/Fortran代码的工具*
• 线性代数、傅里叶变换、随机数生成等功能
(3)NumPy是SciPy、Pandas等数据处理或科学计算库的基础
(4)numpy存在的意义是什么?
python已经存在可以充当数组用的列表,为什么还需要一个新的数据结构。原因有:
• numpy的多维数组ndarray可以把整个维度甚至整个数组当作一个整体进行计算。省去了循环遍历的步骤。
• 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
• 科学计算中,一个维度所有数据的类型往往相同。数组对象采用相同的数据类型,有助于节省运算和存储空间
1.2 numpy结构和基本操作
(1)多维数据结构
类似多维列表的数组,就是c语言的数组arrary类型。实际上numpy是用c写的,效率会比python高。
(2)numpy属性
(3)ndarray的元素类型
(4)numpy数组创建方法
两类创建方法:
- 从Python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple, dtype=np.float32)
#当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型
-
使用NumPy中函数创建ndarray数组,如:arange, ones, zeros
等
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.ones((3,4))
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
>>> np.zeros((3,4),dtype=np.int32)
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
>>> np.eye(5)
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])
>>> x = np.ones((2,3,4))
>>> print(x)
[[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]]
>>> x.shape
(2, 3, 4)
>>> a = np.linspace(1,10,4)
>>> a
array([ 1., 4., 7., 10.])
>>> b = np.linspace(1,10,4,endpoint=False)
>>> b
array([ 1. , 3.25, 5.5 , 7.75])
>>> c = np.concatenate((a,b))
>>> c
array([ 1. , 4. , 7. , 10. , 1. , 3.25, 5.5 , 7.75])
从字节流(raw bytes)中创建ndarray数组
从文件中读取特定格式,创建ndarray数组
(5)ndarray数组的维度变换
>>> a = np.ones((2,3,4), dtype=np.int32)
>>> a.reshape((3,8))
array([[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1]])
>>> a
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
>>> a.resize((3,8))
>>> a
array([[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1]])
(6)ndarray数组的类型变换
new_a = a.astype(new_type)
(7)ndarray数组向列表的转换
ls = a.tolist()
(8)ndarray索引和切片
- 索引:获取数组中特定位置元素的过程
- 切片:获取数组元素子集的过程
- 一维数组的索引和切片:与Python的列表类似
- 多维数组的切片也类似
(9)ndarray数组与标量
数组与标量之间的运算作用于数组的每一个元素
(10)ndarray一元函数
>>> a = np.arange(24).reshape((2,3,4))
>>> np.square(a)
array([[[ 0, 1, 4, 9],
[ 16, 25, 36, 49],
[ 64, 81, 100, 121]],
[[144, 169, 196, 225],
[256, 289, 324, 361],
[400, 441, 484, 529]]], dtype=int32)
>>> a = np.sqrt(a)
>>> a
array([[[ 0. , 1. , 1.41421356, 1.73205081],
[ 2. , 2.23606798, 2.44948974, 2.64575131],
[ 2.82842712, 3. , 3.16227766, 3.31662479]],
[[ 3.46410162, 3.60555128, 3.74165739, 3.87298335],
[ 4. , 4.12310563, 4.24264069, 4.35889894],
[ 4.47213595, 4.58257569, 4.69041576, 4.79583152]]])
>>> np.modf(a)
(array([[[ 0. , 0. , 0.41421356, 0.73205081],
[ 0. , 0.23606798, 0.44948974, 0.64575131],
[ 0.82842712, 0. , 0.16227766, 0.31662479]],
[[ 0.46410162, 0.60555128, 0.74165739, 0.87298335],
[ 0. , 0.12310563, 0.24264069, 0.35889894],
[ 0.47213595, 0.58257569, 0.69041576, 0.79583152]]]), array([[[ 0., 1., 1., 1.],
[ 2., 2., 2., 2.],
[ 2., 3., 3., 3.]],
[[ 3., 3., 3., 3.],
[ 4., 4., 4., 4.],
[ 4., 4., 4., 4.]]]))
(11)ndarray二元函数
1.3 numpy文件存取与函数
(1).csv文件的写入和存取
只能有效存储一维和二维数组
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• array : 存入文件的数组
• fmt : 写入文件的格式,例如:%d %.2f %.18e
• delimiter : 分割字符串,默认是任何空格
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• dtype : 数据类型,可选
• delimiter : 分割字符串,默认是任何空格
• unpack : 如果True,读入属性将分别写入不同变量
np.savetxt('a.csv',a,fmt='%d',delimiter=',')
b = np.loadtxt('a.csv',dtype=np.int,delimiter=',')
可参考:python之numpy库[1]
( 2).多维数据的存取
#写
a.tofile(frame, sep='', format='%s')
• frame : 文件、字符串
• sep : 数据分割字符串,如果是空串,写入文件为二进制
• format : 写入数据的格式
#读
np.fromfile(frame,dtype=float, count=‐1, sep='')
• frame : 文件、字符串
• dtype : 读取的数据类型
• count : 读入元素个数,‐1表示读入整个文件
• sep : 数据分割字符串,如果是空串,写入文件为二进制
Attention!!
该方法需要读取时知道存入文件时数组的维度和元素类型
即需要配合reshape来读取。
便捷存取就不需要考虑这种问题,存取过程如下:
np.save(fname, array) 或 np.savez(fname, array)
• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
• array : 数组变量
np.load(fname)
• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
在上述存储过程中就把维度信息等数组信息存在了文件里:
5.numpy的随机数函数
6.numpy的统计函数
7.numpy的梯度函数
更多详细内容参见python之numpy库[2]
本文大纲和部分内容均摘自:Python数据分析与展示