14天学习训练营导师课程:
杨老师推荐自学Python的网站
w3schools
geeksforgeeks
realpython
引用杨老师说的: 中文的这里不推荐,因为很多机构的翻译水品参差不齐,直接看英文的自己学吧,这个能快速的提升你的技能水平, 不光是编程,还有英语。 你可能会问为什么不推荐书籍,因为书籍的时效性太低了,可能出版之后版本都换了好几轮了, 很多里面的代码都跑不通,具体为什么里也不会给你说,所以直接看网站的教程是最好的选择。
1.Numpy介绍
Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展
Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作
2.Numpy安装
- window电脑点击win键+R,输入:cmd
2.安装 numpy,pip 命令安装 ,我们使用豆瓣的镜像源来安装
pip install numpy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com • 1
3.导包
import numpy as np
3.Numpy模块练习
numpy数组即numpy的ndarray对象,创建numpy数组就是把一个列表传入np.array()方法。
3.1 创建数组
创建一维、二维、三维ndarray对象
# @Time : 2022/11/24 19:25 # @Author : hyh # @File : Numpy模块练习.py # @Software : PyCharm import numpy as np # np.array? 相当于pycharm的ctrl+鼠标左键 # 创建一维的ndarray对象 arr = np.array([1, 2, 3]) print(arr, type(arr)) # 创建二维的ndarray对象 print(np.array([[1, 2, 3], [4, 5, 6]])) # 创建三维的ndarray对象 print(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
执行结果:
3.2 获取数组
由于numpy数组是多维的,对于二维的数组而言,numpy数组就是既有行又有列。
注意:对于numpy我们一般多讨论二维的数组。
arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr) # 获取numpy数组的行和列构成的数组 print(arr.shape) # 获取numpy数组的行 print(arr.shape[0]) # 获取numpy数组的列 print(arr.shape[1])
执行结果:
[[1 2 3] [4 5 6]] 获取numpy数组的行和列构成的数组 (2, 3) 获取numpy数组的行 2 获取numpy数组的列 3
3.3 切割数组
切分numpy数组类似于列表的切割,但是与列表的切割不同的是,numpy数组的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。
# @Time : 2022/11/24 19:45 # @Author : hyh # @File : 切割numpy数组.py # @Software : PyCharm import numpy as np arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) print('取所有元素') # 取所有元素 print(arr[:, :]) print('取第一行的所有元素') # 取第一行的所有元素 print(arr[:1, :]) print('取第一列的所有元素') # 取第一列的所有元素 print(arr[:, :1]) print('取第一列的所有元素') # 取第一列的所有元素 print(arr[(0, 1, 2), 0]) print('取第一行第一列的元素') # 取第一行第一列的元素 print(arr[(0, 1, 2), 0]) print('取第一行第一列的元素') # 取第一行第一列的元素 print(arr[0, 0]) print('取大于5的元素,返回一个数组') # 取大于5的元素,返回一个数组 print(arr[arr > 5]) print('numpy数组按运算符取元素的原理,即通过arr > 5生成一个布尔numpy数组') # numpy数组按运算符取元素的原理,即通过arr > 5生成一个布尔numpy数组 print(arr > 5)
执行结果:
"D:\Program Files\Python\Python36\python.exe" D:/E/PythonWork/Pytest2022/CSDN打卡/切割numpy数组.py [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 取所有元素 [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 取第一行的所有元素 [[1 2 3 4]] 取第一列的所有元素 [[1] [5] [9]] 取第一列的所有元素 [1 5 9] 取第一行第一列的元素 [1 5 9] 取第一行第一列的元素 1 取大于5的元素,返回一个数组 [ 6 7 8 9 10 11 12] numpy数组按运算符取元素的原理,即通过arr > 5生成一个布尔numpy数组 [[False False False False] [False True True True] [ True True True True]] Process finished with exit code 0
3.4 替换数组
numpy数组元素的替换,类似于列表元素的替换,并且numpy数组也是一个可变类型的数据,即如果对numpy数组进行替换操作,会修改原numpy数组的元素,所以下面我们用.copy()方法举例numpy数组元素的替换。
# @Time : 2022/11/24 19:53 # @Author : hyh # @File : numpy数组元素替换.py # @Software : PyCharm import numpy as np arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) print('取第一行的所有元素,并且让第一行的元素都为0') # 取第一行的所有元素,并且让第一行的元素都为0 arr1 = arr.copy() arr1[:1, :] = 0 print(arr1) print('取所有大于5的元素,并且让大于5的元素为0') # 取所有大于5的元素,并且让大于5的元素为0 arr2 = arr.copy() arr2[arr > 5] = 0 print(arr2) print('对numpy数组清零') # 对numpy数组清零 arr3 = arr.copy() arr3[:, :] = 0 print(arr3)
执行结果:
"D:\Program Files\Python\Python36\python.exe" D:/E/PythonWork/Pytest2022/CSDN打卡/numpy数组元素替换.py [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 取第一行的所有元素,并且让第一行的元素都为0 [[ 0 0 0 0] [ 5 6 7 8] [ 9 10 11 12]] 取所有大于5的元素,并且让大于5的元素为0 [[1 2 3 4] [5 0 0 0] [0 0 0 0]] 对numpy数组清零 [[0 0 0 0] [0 0 0 0] [0 0 0 0]] Process finished with exit code 0
3.5 合并数组
numpy数组的合并
# @Time : 2022/11/24 20:39 # @Author : hyh # @File : numpy数组合并.py # @Software : PyCharm import numpy as np arr1 = np.array([[1, 2], [3, 4], [5, 6]]) print(arr1) arr2 = np.array([[7, 8], [9, 10], [11, 12]]) print(arr2) print('合并两个numpy数组的行,注意使用hstack()方法合并numpy数组,numpy数组应该有相同的行,其中hstack的h表示horizontal水平的') # 合并两个numpy数组的行,注意使用hstack()方法合并numpy数组,numpy数组应该有相同的行,其中hstack的h表示horizontal水平的 print(np.hstack((arr1, arr2))) print('合并两个numpy数组,其中axis=1表示合并两个numpy数组的行') # 合并两个numpy数组,其中axis=1表示合并两个numpy数组的行 print(np.concatenate((arr1, arr2), axis=1)) print('合并两个numpy数组的列,注意使用vstack()方法合并numpy数组,numpy数组应该有相同的列,其中vstack的v表示vertical垂直的') # 合并两个numpy数组的列,注意使用vstack()方法合并numpy数组,numpy数组应该有相同的列,其中vstack的v表示vertical垂直的 print(np.vstack((arr1, arr2))) print('合并两个numpy数组,其中axis=0表示合并两个numpy数组的列') # 合并两个numpy数组,其中axis=0表示合并两个numpy数组的列 print(np.concatenate((arr1, arr2), axis=0))
执行结果:
"D:\Program Files\Python\Python36\python.exe" D:/E/PythonWork/Pytest2022/CSDN打卡/numpy数组合并.py [[1 2] [3 4] [5 6]] [[ 7 8] [ 9 10] [11 12]] 合并两个numpy数组的行,注意使用hstack()方法合并numpy数组,numpy数组应该有相同的行,其中hstack的h表示horizontal水平的 [[ 1 2 7 8] [ 3 4 9 10] [ 5 6 11 12]] 合并两个numpy数组,其中axis=1表示合并两个numpy数组的行 [[ 1 2 7 8] [ 3 4 9 10] [ 5 6 11 12]] 合并两个numpy数组的列,注意使用vstack()方法合并numpy数组,numpy数组应该有相同的列,其中vstack的v表示vertical垂直的 [[ 1 2] [ 3 4] [ 5 6] [ 7 8] [ 9 10] [11 12]] 合并两个numpy数组,其中axis=0表示合并两个numpy数组的列 [[ 1 2] [ 3 4] [ 5 6] [ 7 8] [ 9 10] [11 12]] Process finished with exit code 0
3.6 numpy数组的常用属性
属性 | 解释 |
T | 数组的转置(对高维数组而言) |
dtype | 数组元素的数据类型 |
size | 数组元素的数据类型 |
ndim | 数组的维数 |
shape | 数组的维度大小(以元组形式) |
astype | 类型转换 |