numpy学习笔记
笔记一
1、什么是numpy
Python中做科学计算的基础库,多用于在大型、多维数组上执行数值运算;
2、创建数组的方法
方式一,通过np.array()创建,中间传递列表或元组等
# 通过np.array()创建数组
array = np.array([1,2,3,4,5,6])
array2 = np.array((1,2,3,4,5,6))
print(array)
print(array2)
方式二、通过np.arange()创建数组,里面3个参数,第一个是起始值,第二个是终止值,第三个是步长
# 通过np.arange()创建数组
array = np.arange(0, 10, 2)
print(array)
3、数组属性
属性1,dtype 数据类型
# 通过dtype查看数据类型
array = np.array([1,2,3,4,5,6])
print(array.dtype)
在创建数组的方法中,也有dtype参数用于指定创建的数组中的数据类型
# 通过dtype属性指定数据类型
array = np.array([1,2,3,4,5,6], dtype="float32")
print(array.dtype)
也可以使用astype方法去修改数组的数据类型
# 通过astype函数修改数据类型
# 这里注意astype函数有返回值,它不会去修改array,所以需要我们使用array去接收返回值,如果不接收array不改变数据类型
array = np.array([1,2,3,4,5,6])
print(array.dtype)
array = array.astype("float32")
print(array.dtype)
属性2、shape 查看形状
# 通过shape属性查看形状
array = np.array([1,2,3,4,5,6])
print(array.shape)
通过reshape方法可以修改数组的形状
# 通过reshape方法修改形状
array = np.array([1,2,3,4,5,6])
print(array.shape)
array = array.reshape((2,3))
print(array.shape)
注意,array.reshape((n, 1))和array.reshape((n,))是不同的,第一个是2维的,第二个是1维的。
array = np.array([[1,2,3],[4,5,6]])
array = array.reshape((6,))
print(array.shape)
array = array.reshape((6,1))
print(array.shape)
4、数组计算
情况1,数组与数字计算。广播原则,数字和数组内每一个元素去计算
array = np.array([[1,2,3],[4,5,6]])
print(array + 2)
print(array * 2)
print(array / 2)
情况2,数组与数组计算
如果两个数组形状相同,则对应位置执行计算
array = np.array([[1,2,3],[4,5,6]])
array2 = np.array([[4,5,6],[7,8,9]])
print(array + array2)
print(array * array2)
print(array / array2)
如果两个数组形状不相同,如果符合广播原则,则可以计算。不符合则不能计算
广播原则:
如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
示例1:这里array形状为(3,3,2),array2形状为(3,2),形状不同,但(3,2)与(3,3,2)的后面的(3,2)相同,满足广播原则,所以可以计算
array = np.array([[[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]]])
print(array.shape)
array2 = np.array([[1,2],[4,6],[8,9]])
print(array2.shape)
array2 + array
示例2:这里array形状为(3,3,2),array2形状为(3,3),形状不同,同时(3,3)与(3,3,2)的后面的(3,2)不相同,不满足广播原则,所以不能计算,会报错
补充,广播原则里说“如果两个数组的后缘维度,即从末尾开始算起的维度的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。”,所以要从末尾开始看起,而不能说看(3,3)与(3,3,2)的前面的(3,3)相同就说它们可以计算
array = np.array([[[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]]])
print(array.shape)
array2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(array2.shape)
array2 + array
示例3:
array = np.array([[[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]]])
print(array.shape)
array2 = np.array([1,2])
print(array2.shape)
array2 + array
5、其他操作
np.round(array, n), array中的元素保留n位小数
# np.round(array, n) 对数组array保留n位小数
array = np.array([2.35, 3.23, 5.67])
array = np.round(array, 1)
print(array)
array.flatten() array变成1维数组
# array.flatten() array变成1维数组
array = np.array([[1,2,3],[4,5,6]])
array = array.flatten()
print(array)
笔记二
1、数组的转置
对于numpy中的数组来说就是在对角线方向交换数据
方式1,array.transpose()
方式2,array.T
/array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
# 数组转置
print(array.transpose())
print(array.T)
2、数组的索引和切片
以下是对二维数组操作
行操作
取某一行:array[行标]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第3行
print(array[2])
取连续多行:array[行标1:行标2]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1至3行
print(array[0:3])
取不连续多行:array[[行标1, 行标2,…]]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1和3行
print(array[[0,2]])
列操作
取一列:array[:,列标]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第3列
print(array[:,2])
取连续的多列:array[:,列标:]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1至3列
print(array[:, 0:3])
取不连续多列:array[:,[列标1,列标2,…]]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1和3列
print(array[:, [0,2]])
取某一行一列的值:array[行标,列标]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第2行第4列的值
print(array[1,3])
取多行多列:array[行标:行标2, 列标:列标2]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1至3行,第1至3列的值
print(array[0:3, 0:3])
取不相邻的点:array[[行标,列标],[行标,列],…]
array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取不相邻的点
print(array[[1,2], [2,3]])