4.1numpy优势
1.numpy定义:
- 是一个开源的Python科学计算库,用于快速处理任意维度的数组。
- Numpy中存储对象ndarray
-
2.创建ndarray
- np.array([ ])
-
3.numpy优势
- 内存块风格 --一体式存储
-
- 支持并行化运算
-
- 效率高于纯python代码,内部释放GIL,底部使用c
-
4.2 N维数组-ndarray
1 ndarray的属性
- 属性名字 属性解释
- ndarray.shape 数组维度的元组
- ndarray.ndim 数组维数
- ndarray.size 数组中的元素数量
- ndarray.itemsize 一个数组元素的长度(字节)
- ndarray.dtype 数组元素的类型
-
2.ndarray形状
- np.array()
- 三维数组不好理解 ---excel中很多sheet
-
3.ndarray类型
- bool
- int
- str
-
…
- - 注意:若不指定,整数默认int64,小数默认float64
-
4.3 基本操作
- 1.生成0和1的数组
- np.ones()
- np.ones.like()
-
- 2.从现有数组生成
- np.array -- 深拷贝
- np.asarray --浅拷贝
-
- 3.生成固定范围数组
- np.linspace()
- num -- 生成等间隔多少个
- np.arange()
- step --每间隔多少生成数据
- np.logspace()
- 生成以10的N次幂数据
-
- 4.生成随机数
- 1.均匀分布生成
- np.random.uniform()
- - low
- - heigh
- - size
-
2.正态分布
- 均值,方差
- 均值 --图形左右位置
- 方差 --图像是瘦还是胖
- - 值越小,图像越瘦高,数据越集中
- - 值越大,图像越矮胖,数据越分散
-
3.正态分布api
- np.random.normal()
- - low()
- - heigh()
- - size()
-
4.2数组的索引切片
- 直接索引
- 先对行进行索引,然后对列索引
- 高维度数组索引从宏观到微观
-
形状修改
- 1.对象.reshape
- 不进行行列互换,不产生新的变量
-
- 2.对象.resize
- 进项行列互换,对原值进行修改
-
- 3.对象.T
- 进行行列互换
-
5.类型修改:
5.1 ndarray.astype(type)
- 返回修改了类型之后的数组
- stock_change.astype(np.int32)
-
5.2 ndarray.tostring([order])或者ndarray.tobytes([order])
- 构造包含数组中原始数据字节的Python字节
- arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])
- arr.tostring()
-
6 数组的去重
6.1 np.unique()
- temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
-
7.ndarray运算
1 逻辑运算
- # 生成10名同学,5门功课的数据
- >>> score = np.random.randint(40, 100, (10, 5))
-
- # 取出最后4名同学的成绩,用于逻辑判断
- >>> test_score = score[6:, 0:5]
-
- # 逻辑判断, 如果成绩大于60就标记为True 否则为False
- >>> test_score > 60
- array([[ True, True, True, False, True],
- [ True, True, True, False, True],
- [ True, True, False, False, True],
- [False, True, True, True, True]])
-
- # BOOL赋值, 将满足条件的设置为指定的值-布尔索引
- >>> test_score[test_score > 60] = 1
- >>> test_score
- array([[ 1, 1, 1, 52, 1],
- [ 1, 1, 1, 59, 1],
- [ 1, 1, 44, 44, 1],
- [59, 1, 1, 1, 1]])
-
2 通用判断函数
- np.all()
- # 判断前两名同学的成绩[0:2, :]是否全及格
- >>> np.all(score[0:2, :] > 60)
- False
- np.any()
- # 判断前两名同学的成绩[0:2, :]是否有大于90分的
- >>> np.any(score[0:2, :] > 80)
- True
-
3 np.where(三元运算符)
- 通过使用np.where能够进行更加复杂的运算
-
- np.where()
- # 判断前四名学生,前四门课程中,成绩中大于60的置为1,否则为0
- temp = score[:4, :4]
- np.where(temp > 60, 1, 0)
- 复合逻辑需要结合np.logical_and和np.logical_or使用
- # 判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
- np.where(np.logical_and(temp > 60, temp < 90), 1, 0)
-
- # 判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
- np.where(np.logical_or(temp > 90, temp < 60), 1, 0)
-
4.统计运算
- 在数据挖掘/机器学习领域,统计指标的值也是我们分析问题的一种方式。常用的指标如下:
-
- min(a, axis)
- Return the minimum of an array or minimum along an axis.
- max(a, axis])
- Return the maximum of an array or maximum along an axis.
- median(a, axis)
- Compute the median along the specified axis.
- mean(a, axis, dtype)
- Compute the arithmetic mean along the specified axis.
- std(a, axis, dtype)
- Compute the standard deviation along the specified axis.
- var(a, axis, dtype)
- Compute the variance along the specified axis.
-
- 进行统计的时候,axis 轴的取值并不一定,Numpy中不同的API轴的值都不一样,在这里,axis 0代表列, axis 1代表行去进行统计
-
8.数组之间运算
- 1 数组与数的运算
-
- arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
- arr + 1
- arr / 2
-
- # 可以对比python列表的运算,看出区别
- a = [1, 2, 3, 4, 5]
- a * 3
-
2 数组与数组的运算
- arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
- arr2 = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
-
9.矩阵
其他知识略…,我也看不懂,api看懂了
矩阵api
- np.matmul
- np.dot
-
- >>> a = np.array([[80, 86],
- [82, 80],
- [85, 78],
- [90, 90],
- [86, 82],
- [82, 90],
- [78, 80],
- [92, 94]])
- >>> b = np.array([[0.7], [0.3]])
-
- >>> np.matmul(a, b)
- array([[81.8],
- [81.4],
- [82.9],
- [90. ],
- [84.8],
- [84.4],
- [78.6],
- [92.6]])
-
- >>> np.dot(a,b)
- array([[81.8],
- [81.4],
- [82.9],
- [90. ],
- [84.8],
- [84.4],
- [78.6],
- [92.6]])
-
np.matmul和np.dot的区别:
- 二者都是矩阵乘法。 np.matmul中禁止矩阵与标量的乘法。 在矢量乘矢量的內积运算中,np.matmul与np.dot没有区别。
-