第二章、科学计算库numpy
NumPy数组对象
NumPy中最重要的一个特点就是其N维数组对象,即ndarray(array)对象,该对象可以执行一些科学计算。
array.shape:这是一个整数的元组,表示每个维度上数组的大小。例如一个n行和m列的数组,他的shape属性为(n,m)。
array.dtype:描述数组中元素类型的对象,例如numpy.int32、numpy.float64。
创建NumPy数组
#创建一维数组
import numpy as np
data1=np.array([1,2,3)]
#创建二维数组
data2=np.array([[1,2,3],[4,5,6]])
创建元素值全是随机数的数组
np.empty((5,2))
用arrange()函数创建等差数组
np.arange(1, 20, 5)
用array.dtype创建表示数据类型的对象,dtype可以指定数据类型的长度
data_one = np.array([[1, 2, 3], [4, 5, 6]])
ndarray对象的数据类型可以通过astype()方法进行转换。
data = np.array([[1, 2, 3], [4, 5, 6]])
data.dtype
#数据类型转换为float64
float_data = data.astype(np.float64)
float_data.dtype
array的索引和切片
arr = np.arange(8)
# 获取索引为5的元素
arr[5]
# 获取索引为3~5的元素,但不包括5
arr[3:5]
二维数组的索引
在二维数组中,每个索引位置上的元素不再是一个标量而是一个一维数组。
arr2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 获取索引为1的元素
arr2d[1]
用"arr[x,y]"的索引来获取二维数组的单个元素(x表示行号,y表示列号)。
# 获取位于第0行第1列的元素
arr2d[0, 1]
切片
多维数组的切片是沿着行或列的方向选取元素的,我们可以传入一个切片,也可以传入多个切片,还可以将切片与整数索引混合使用。
eg:
arr2d[:2]
#两个切片
arr2d[0:2, 0:2
#切片与整数索引混合使用
arr2d[1, :2]
布尔型索引
布尔型索引指的是将一个布尔数组作为数组索引,返回的数据是布尔数组中True对应位置的值。
array([False, False,
True, False])
利用NumPy数组进行数据处理
将条件逻辑转为数组运算
NumPy的where()函数是三元表达式x if condition else y的矢量化版本。
arr_x = np.array([1, 5, 7])
arr_y = np.array([2, 6, 8])
arr_con = np.array([True, False, True])
result = np.where(arr_con, arr_x, arr_y)
数组的统计汇总方法
- sum:对数组中全部或某个轴向的元素求和
- mean:算数平均值
- min:计算组中的最小值
- max:计算组中的最大值
- argmin:表示最小值的索引
- argmax:表示最大值的索引
数组排序
arr = np.array([[6, 2, 7],
[3, 6, 2],
[4, 3, 2]])
arr.sort()
检查数组元素
all()函数用于判断整个数组中的元素的值是否全部满足条件,如果满足条件返回True,否则返回False。
arr = np.array([[1, -2, -7],
[-3, 6, 2],
[-4, 3, 2]])
# arr的所有元素是否都大于0
np.all(arr > 0)
any()函数用于判断整个数组中的元素至少有一个满足条件就返回True,否则就返回False。
arr = np.array([[1, -2, -7],
[-3, 6, 2],
[-4, 3, 2]])
# arr的所有元素是否有一个大于0
np.any(arr > 0)
随机数模块
# 随机生成一个二维数组
np.random.rand(3, 3)
seed( )函数可以保证生成的随机数具有可预测性,也就是说产生的随机数相同。
numpy.random.seed(seed=None)
可以生成服从多种概率分布随机数的函数:
- seed:生成随机数的种子
- rand:产生均匀分布的样本值
- randint:从给定的上下限范围内随机选取整数