数组间运算
【数组与数】的4则运算:
- [[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]
注意:python里面的列表是这样的运算规则吗?不是的。
- 我们发现a这个数组被复制了,可以参考python列表的运算,这样就对比出来一维数组和二维数组的区别了。
【数组与数组】的4则运算:
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]])
错误提示信息为:不能广播。
广播机制:
- 需要满足的两个条件是:要运算的这两个数组要么维度上的数是相等的要么有一个维度上有1。
- 拿上图中【最后一个】解释如下:第一个维度上都是15,所以满足维度相等这个条件,第二个维度一个是3一个是1,虽然维度不相等,但是对应的位置上有1,第三个维度一个是5一个是1,虽然维度不相等,但是对应的位置上有1。最后的运算结果就是取该维度上最大的值作为最后的运算结果的维度。
具体演示如下:
- 总结:最终运算后的维度也是取维度中对应位置上最大的维度值。
矩阵运算:
- 场景:
思考:如何能够直接得出每个学生的成绩?
- 什么是矩阵:
- 矩阵,英文matrix,和array的区别矩阵必须是二维的,但是array可以实多维的。
- np.mat()
- 将数组转换成矩阵类型
- 将数组转换成矩阵类型
将数组转换为矩阵:
矩阵乘法运算:
- 矩阵乘法的两个关键:
- 形状改变
- 运算规则
- 矩阵乘法api:
- np.matmul
- np.dot
- 矩阵应用场景
- 大部分机器学习算法需要用到
具体演示如下:
将数组转换为矩阵:
- data_mat = np.mat([[80, 86], [82, 80], [85, 78], [90, 90], [86, 82], [82, 90], [78, 80], [92, 94]])
使用np.matmul()进行数组相乘:
使用np.matmul()进行矩阵相乘:
使用np.matmul()进行数组与矩阵相乘:
使用np.dot()进行数组相乘:
使用np.dot()进行矩阵相乘:
使用np.dot()进行数组与矩阵相乘:
相乘的特殊形式:
- 错误提示信息为:不满足广播机制,不能进行运算。
相乘的另一种形式:
矩阵乘法运算总结:
- 注意:数组是ndarray,矩阵一定是数组,而数组不一定是矩阵,因为矩阵必须是二维的,也就是矩阵是一个二维数组。
合并与分割:
- 合并api:
np.hstack():也叫做水平合并,也就是按照列进行拼接。
一维数据的水平合并:
- a = np.array((1, 2, 3))
- b = np.array((4, 5, 6))
- 也可以:
二维数据的水平合并:
- a = np.array([[1],[2],[3]])
- b = np.array([[4],[5],[6]])
- 也可以:
np.vstack():也叫做垂直合并,也就是按照行进行拼接。
一维数据的垂直合并:
- a = np.array((1, 2, 3))
- b = np.array((4, 5, 6))
- 也可以:
二维数据的垂直合并:
- a = np.array([[1],[2],[3]])
- b = np.array([[4],[5],[6]])
- 也可以:
np.concatenate():即可以水平合并又可以垂直合并。
- a = np.array([[1, 2], [3, 4]])
- b = np.array([[5, 6]])
axis=0的时候,按照数组的行方向拼接在一起.
- 也可以:
- 默认是axis=0。
axis=1的时候,按照数组的列方向拼接在一起.
- 也可以:
- 如果b不进行转置的时候就会报错。
案例:将前2只股票的前4天数据和后3只股票的前4天数据进行合并。
- 此种情况就不能按照列进行拼接在一起了:
- 稍微将数据进行一下变换:
- 按行方向进行拼接:
- 按列方向进行拼接:
分割api
IO操作:
问题:
- 大多数数据并不是我们自己构造的,而是存在文件当中,需要我们用工具获取。但是Numpy其实并不适合用来读取和处理数据,因此我们这里了解相关api,以及numpy不方便的地方即可。
numpy读取数据:
- 因为csv文件是以逗号进行分隔的,所以,第二个参数的值为逗号。
(了解)数据处理入门:
什么是缺失值?
如何处理缺失值?