Numpy
Numpy
- 简介
- ndarray
- 通用函数
- 其他
1、简介
Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。
安装方法:
pip install numpy
引用方式:
import numpy as np
这是官方认证的导入方式,可能会有人说为什么不用from numpy import *
,是因为在numpy当中有一些方法与Python中自带的一些方法,例如max
、min
等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法
2、ndarray -多维数组对象
1,ndarray的优点
按照Python当中的方法
第一种:是将所有的美元通过for循环依次迭代出来,然后用每个公司的市值乘以汇率
第二种:通过map方法和lambda函数映射
2、创建ndarray对象
np.array()
3、ndarray是一个多维数组列表
- 数组对象内的元素类型必须相同
- 数组大小不可修改
4、常用属性
属性 描述 T 数组的转置(对高维数组而言) dtype 数组元素的数据类型 size 数组元素的个数 ndim 数组的维数 shape 数组的维度大小(以元组形式) View CodeT:转置 li1 = [ [1,2,3], [4,5,6] ] a = np.array(li1) a.T 执行结果: array([[1, 4], [2, 5], [3, 6]]) 就相当于是将行变成列,列变成行,它也是一个比较常用的方法5、数据类型
- dtype
类型 描述 布尔型 bool_ 整型 int_ int8 int16 int32 int 64 无符号整型 uint8 uint16 uint32 uint64 浮点型 float_ float16 float32 float64 复数型 complex_ complex64 complex128
6、ndarray-创建
方法 | 描述 | |
---|---|---|
array() | 将列表转换为数组,可选择显式指定dtype | |
arange() | range的numpy版,支持浮点数 | |
linspace() | 类似arange(),第三个参数为数组长度 | |
zeros() | 根据指定形状和dtype创建全0数组 | |
ones() | 根据指定形状和dtype创建全1数组 | |
empty() | 根据指定形状和dtype创建空数组(随机值) | |
eye() | 根据指定边长和dtype创建单位矩阵 |
1、arange(): np.arange(1.2,10,0.4) 执行结果: array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. , 6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6]) # 在进行数据分析的时候通常我们遇到小数的机会远远大于遇到整数的机会,这个方法与Python内置的range的使用方法一样 ----------------------------------------------------------------- 2、linspace() np.linspace(1,10,20) 执行结果: array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684, 3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789, 5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895, 8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ]) # 这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾,在1到10之间生成的二十个数每个数字之间的距离相等的,前后两个数做减法肯定相等 ---------------------------------------------------------------- 3、zeros() np.zeros((3,4)) 执行结果: array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) # 会用0生成三行四列的一个多维数组 --------------------------------------------------------------------- 4、ones() np.ones((3,4)) 执行结果: array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) # 会用1生成三行四列的一个多维数组 ------------------------------------------------------------------------ 5、empty() np.empty(10) 执行结果: array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) # 这个方法只申请内存,不给它赋值 ----------------------------------------------------------------------- 6、eye() 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.]])
7、索引和切片
- 数组和标量(数字)之间运算
-
索引 li = [1,2,3,4,5] # 0 1 2 3 4 li[0] 1 [1,2,3,4] import numpy as np # 导入numpy res = np.array([1,2,3,4]) res[1] # 一维数组索引取值与python一模一样 2 # 二维数组索引 res1 = np.array([[1,2,3,4],[5,6,7,8]]) res1 # 二维数组索引 # res1[1,1] array([[1, 2, 3, 4], [5, 6, 7, 8]]) 第一种方法: res1[1,1] # 第一种方法:二维数组索引,第一个参数代表行索引,逗号后面是列索引,不管是行索引还是列索引,都是从零开始 6 res1[1][1] # 第二中方法: 6
切片 li = [1,2,3,4,5] li[1:4] # python 切片取值,顾头不顾尾 [2, 3, 4] 一维数组与python切片取值一样 res = np.array([1,2,3,4,5]) res[1:4] # 一维数组与python切片取值一样 array([2, 3, 4]) res = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) res array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) # res[1:2,1:2] res[1:3] # 多维数组 array([[ 5, 6, 7, 8], [ 9, 10, 11, 12]]) 顾头不顾尾 res[1:3,1:3] # 逗号前面的是行切片,逗号后面的是列切片 顾头不顾尾 array([[ 6, 7], [10, 11]])
布尔型索引 res # 给一个数组,选出数组中大于5 的数 import random li = [random.randint(1,10) for _ in range(20)] res = np.array(li) res array([ 8, 8, 1, 9, 9, 6, 1, 7, 4, 1, 3, 4, 6, 10, 1, 8, 3, 3, 2, 8]) 可以直接进行比较,得到的值是布尔值 res > 5 # numpy可以直接进行比较,得到的值是布尔值 array([ True, True, False, True, True, True, False, True, False, False, False, False, True, True, False, True, False, False, False, True]) res[res > 5] # 外边的res会将布尔值为ture的索引传进来,再输出,非常简单 array([ 8, 8, 9, 9, 6, 7, 6, 10, 8, 8]) 偶数,等都可以用此方法,整除有余,就为奇, # 奇数,偶数,等都可以用此方法,整除有余,就为奇, res = np.array([[1,2,3,4],[5,6,7,8]]) res array([[1, 2, 3, 4], [5, 6, 7, 8]]) 用法 res[res>5] # 二维数组的用法 array([6, 7, 8])
花式索引 res res = np.array([1,2,3,4,5,6,7,8,9]) res array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 获取 2,4,7,9 这几个值的一个数组 res[[1,3,6,8]] # 花式索引,即中括号中套中括号,哪层括号中的数据就是你要取的值的对应的索引 array([2, 4, 7, 9])
res = np.array([1,2,3,4,5,6,7,8,9,10])
res.reshape(2,5) # reshape,转置,前提是括号中的值的个数和不能是单数,括号中数的乘积必须与原数组中值的总个数一致
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
3、通用函数
常见通用函数:
能够接受一个数组的叫做一元函数,接受两个数组的叫二元函数,结果返回的也是一个数组
-
-
- 一元函数:
-
函数 | 功能 | |
---|---|---|
abs、fabs | 分别是计算整数和浮点数的绝对值 | |
sqrt | 计算各元素的平方根 | |
square | 计算各元素的平方 | |
exp | 计算各元素的指数e**x | |
log | 计算自然对数 | |
sign | 计算各元素的正负号 | |
ceil | 计算各元素的ceiling值 | |
floor | 计算各元素floor值,即小于等于该值的最大整数 | |
rint | 计算各元素的值四舍五入到最接近的整数,保留dtype | |
modf | 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似 | |
isnan | 计算各元素的正负号 | |
isinf | 表示那些元素是无穷的布尔型数组 | |
cos,sin,tan | 普通型和双曲型三角函数 |
-
-
- 二元函数:
-
函数 | 功能 | |
---|---|---|
add | 将数组中对应的元素相加 | |
subtract | 从第一个数组中减去第二个数组中的元素 | |
multiply | 数组元素相乘 | |
divide、floor_divide | 除法或向下圆整除法(舍弃余数) | |
power | 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B | |
maximum,fmax | 计算最大值,fmax忽略NAN | |
miximum,fmix | 计算最小值,fmin忽略NAN | |
mod | 元素的求模计算(除法的余数) |
补充内容:浮点数特殊值
浮点数:float
浮点数有两个特殊值:
1、nan(Not a Number):不等于任何浮点数(nan != nan)
---------------------------------------------
2、inf(infinity):比任何浮点数都大
---------------------------------------------
- Numpy中创建特殊值:np.nan、np.inf
- 数据分析中,nan常被用作表示数据缺失值
3.1、数学统计方法
函数 | 功能 | |
---|---|---|
sum | 求和 | |
cumsum | 求前缀和 | |
mean | 求平均数 | |
std | 求标准差 | |
var | 求方差 | |
min | 求最小值 | |
max | 求最大值 | |
argmin | 求最小值索引 | |
argmax | 求最大值索引 |
3.2、随机数
随机数生成函数在np.random的子包当中
常用函数
函数 | 功能 | |
---|---|---|
rand | 给定形状产生随机数组(0到1之间的数) | |
randint | 给定形状产生随机整数 | |
chocie | 给定形状产生随机选择 | |
shuffle | 与random.shuffle相同 | |
uniform | 给定形状产生随机数组 |