科学计算库 NumPy

144 阅读2分钟

1、NumPy的优势

(1)NumPy介绍 - 数值计算库

num - numerical (数值化的)
py - python

45347d05523fbf079e022447ebac477c_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

(2)ndarray介绍

ndarray:n - 任意个 ;d - dimension 维度 ; array - 数组

d695f891882840e32d05000257171610_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

(3)ndarray 与 Python原生list运算效率比,效率有很大提升,节约了很多时间 --- 用在机器学习里

(4)ndarray的优势

1)存储风格

ndarray - 相同类型 - 通用性不强
list - 不同类型 - 通用性很强

70819e4a6d0207687f568d5f39fadd6f_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

2)并行化运算

ndarray支持向量化运算

3)底层语言

C语言,解除了GIL

599af3f26e5cb3431c5f9dd9ad1495ff_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

2、认识N维数组 - ndarray属性(最重要的:shape、dtype)

(1)ndarray的属性

2e1bf54ef3d8f5e46248a4ba52134007_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

3788b7656537dce3f7491dfc73ddf1fb_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_14,color_FFFFFF,t_70,g_se,x_16.png

(2)ndarray的形状

6c3273bed2c76310219f20efb66f3b0d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

1)如何理解数组的形状

f1384d02f46eab3e54e138f83d433988_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

3c5a0ac153b28c327abf55c772fa0e74_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

2)ndarray的类型

612e177acdaba6954f3fd406b7d6d007_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

3)创建数组的时候指定类型

cf873a715d77fbcc9a1517e5bc2bc54b_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

3、基本操作(adarray.方法()、np.函数名())

(1)生成数组的方法

1)生成0和1

34b055c54af3ef944aaef919222deee8_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

np.zeros(shape)

np.ones(shape)

23297940cdf13978f633856ea45a9d28_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_16,color_FFFFFF,t_70,g_se,x_16.png

2)从现有数组中生成

image.png

np.array()
np.copy()
np.asarray()

np.array() 和 np.copy() 是深拷贝
np.asarray() 是浅拷贝

3)生成固定范围的数组

5cddf923d1eee2aa1cc9d9adc47fd423_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

np.linspace() 
np.linspace(0,10,100)
#         [0,10] 等距离
 
 
np.arange()
# 类似range
np.arange(a,b,c)
# 左闭右开,c是步长

4)生成随机数组

8dc502b968883ccac0e28465cfd3441d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

均匀分布(每组的可能性相等):

image.png

05b86987522f365df7f129ef7f7e9541_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

正态分布:

dd752ad3500f0f4fc54541be75828141_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

47af681e47e5086d63f7fe8969430f61_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

27f5d1ad4fda469dad94724078d549e3_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

f2138a1644a1e4608610976dd699cf3c_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

8630ed1095447e56fe2c6d9b87a23ebb_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

(2)数组的索引、切片

image.png

 (3)形状修改

1)ndarray.reshape() --- 排列顺序没有变,只是重新划分(没有转置),返回新的ndarray,原始数据没有改变

image.png

 2)ndarray.resize() --- 没有返回值,但是会对原始ndarray进行修改,效果跟reshape的一样

8814f5de7f27ead2349cc13b4eb3982c_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

 3)ndarray.T --- 转置

(4)类型修改

ebff08d01f8e69b50b60bab7e9cf847d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

1)ndarray,astype(type)

2)ndarray序列化到本地:ndarray.tostring()

(5)数组的去重

0861b17b63d8e371d537b4bb5c75bdb3_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

4、ndarray运算

(1)逻辑运算

1)逻辑运算

386b830a6fad7cfa2beb0b3a4b54fba4_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

不需要写 for循环 ,只需比较关系就可以得到True / False
也可以直接赋值 --- 布尔索引

image.png

 2)通用判断函数

53ef8620cd8af332f2d59454391b4f0c_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

np.all(布尔值) --- 只要有一个False就返回False,只有全是True才返回True np.any(布尔值) --- 只要有一个True就返回True,只有全是False才返回False

3)三元运算符

image.png

(2)统计运算

1)统计指标

570ec26978a796e3a7755557e56ccf15_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

4fbb983fbae8f9d1ce3db36cc134c474_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

(3)数组间运算

1)数组与数的运算(运算符作用到每一个元素上)

0b49cad734fe35f9bfaadf60a5bb12cc_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

 2)数组与数组的运算(需要满足广播机制)

 3)广播机制

image.png 可行的例子:

d40d833a92ffde512cddac1e38ec9494_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

不匹配的例子:

ca1a960a5b13cd677e347f6114950c0a_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_12,color_FFFFFF,t_70,g_se,x_16.png

4)矩阵运算***非常重要

1、、什么是矩阵:

9f2b3e5a447602131b2cd234912e17b1_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png 两种方法存储矩阵:

ndarray 二维数组 :np.array()
matrix数据结构 : np.mat()

2、、矩阵乘法运算:

e1b6dfe67ef04b5407881fe199e8f73c_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

c3375e1f60d70064f3dae78057005d25_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

np.matmul
np.dot

矩阵与二维数组的区别:矩阵是用二维数组存储的,但是二维数组不一定是矩阵

5、合并、分割(实现数据的切分和合并,将数据进行切分合并处理)

(1)合并

dfaa198619b5baed0d7b1bd817cfc92b_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

f0a060486e612ead8c8aa2d7fcc4087a_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

5a5715ae91625d8d764d4ea21480dd34_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6ZSZ5bCx5piv5a-5,size_20,color_FFFFFF,t_70,g_se,x_16.png

(2)分割

image.png

6、IO操作与数据处理

(1)Numpy读取数据文件

image.png

缺点是:会有数据缺失,所以不建议Numpy进行读取

1)直接删除含有缺失值的样本

2)替换 / 插补

image.png

image.png

(2)如何处理缺失值