哈喽!大家好!很高兴与大家分享自己numpy的学习笔记。以下的笔记内容如有不足之处或错误,欢迎补充和斧正。
俗话说:“工欲善其事,必先利其器”。
1.numpy模块介绍
- NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。
2.numpy创建数组
1) array
2) zero()
3) ones()
4) linespace()
5) arange()
6) random系列
2.1创建一维数组
# 首先要导入numpy模块
import numpy as np # 以下操作都基于此,不在一一导入
arr = np.array([1,2,3])
arr
运行结果:
array([1, 2, 3])
2.2创建二维数组(可以拓宽到多维数组)
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr
运行结果:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
2.3创建一维的等差数列数组,num是元素的个数
np.linspace(0,10,num=6)
运行结果:
array([ 0., 2., 4., 6., 8., 10.])
2.4创建3行3列元素为1的二维数组
np.ones(shape=(3,3))
运行结果:
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
2.5 创建一维等差数列 step为等差值
np.arange(10,30,step=2)
运行结果:
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28])
2.6 创建4行4列随机元素的数组 (0,20)为随机范围,size=(行,列)
np.random.randint(0,20,size=(4,4))
运行结果:
array([[ 5, 16, 5, 13],
[ 7, 11, 3, 15],
[ 3, 17, 18, 19],
[ 8, 14, 16, 3]])
3.数组与列表的区别(类比法)
- 列表中存储的数据类型可以不一样
- 数组中存储的数据类型必须一样
举例说明
列表:
list = [1,'a','abc','你好']
list
运行结果:
[1, 'a', 'abc', '你好']
数组:
arr=np.array([1,2,3])
arr
运行结果:
array([1, 2, 3])
4.numpy的常用属性
- shape
- ndim
- size
- dtype
创建一个随机数组为以下数组属性的演示做准备
arr = np.random.randint(0,10,size=(5,6))
arr
运行结果:
array([[13, 41, 79, 33, 24, 44],
[73, 24, 93, 28, 60, 12],
[78, 41, 8, 9, 31, 3],
[ 8, 2, 28, 77, 62, 48],
[14, 65, 87, 38, 38, 58]])
4.1 arr.shape # 返回的是数组的形状(即5行6列)
运行结果:(5,6)
4.2 arr.ndim # 返回数组的维度(即二维)
运行结果:2
4.3 arr.size # 返回数组元素的个数
运行结果:30
4.4 arr.dtype #返回数组元素的类型
运行结果:dtype('int64')
4.5 type(arr) #数组的数据类型
运行结果:numpy.ndarray
5.numpy的数据类型
注意:
array(dtype=?):可以设定数据类型
arr.dtype = '?':可以修改数据类型
举例
# 创建一个数组作为演示(未改变元素类型时)
arr = np.array([6,6,6])
arr.dtype
运行结果:
dtype('int32')
# 改变元素类型之后
arr = np.array([6,6,6],dtype='int64')
arr.dtype
运行结果:
dtype('int64')
6.numpy的索引和切片操作(通用)
6.1 numpy的索引的操作
# 创建一个随机数组作为演示
arr = np.random.randint(1,10,size=(3,3))
arr
运行结果:
array([[6, 5, 2],
[3, 8, 6],
[4, 8, 4]])
1) 取出数组中下标为1的行数据(注意:下标的索引是从0开始)
arr[1]
运行结果:
array([3, 8, 6])
2) 取出数组中多行的数据
arr[[1,2]] # 取出第1行和第三行的数据
运行结果:
array([[6, 5, 2],
[4, 8, 4]])
6.2 numpy的切片的操作
1)切出arr数组的前两行的数据
arr[0:2]
运行结果:
array([[6, 5, 2],
[3, 8, 6]])
2)切出arr数组中的前两列
# 前一个冒号为行切片,0:2为列切片,即arr[行切片,列切片]
arr[:,0:2]
运行结果:
array([[6, 5],
[3, 8],
[4, 8]])
3) 切出前两行的前两列的数据
arr[0:2,0:2]
运行结果:
array([[6, 5],
[3, 8]])
4) 将数组的行倒置(列倒置:arr[:,::-1])
arr[::-1]
运行结果:
array([[4, 8, 4],
[3, 8, 6],
[6, 5, 2]])
6.3 numpy的变形reshape
# arr为3行3列二维数组
array([[6, 5, 2],
[3, 8, 6],
[4, 8, 4]])
#将二维的数组变形成1维,9为数组元素的个数
arr.reshape((9,))
运行结果:
array([6, 5, 2, 3, 8, 6, 4, 8, 4])
# 将一维变形成多维
arr.reshape((3,3))
运行结果:
array([[6, 5, 2],
[3, 8, 6],
[4, 8, 4]])