目录
学习目标
1.掌握 创建数组,索引与切片
2.掌握 利用数组进行数据处理
3.掌握 通用函数
4.熟悉 随机数模块
一、创建numpy数组
二、ndarray的索引和切片
三、numpy通用函数
四、 利用NumPy数组进行数据处理
五、随机数模块
1.使用array()函数创建数组
# 创建一个一维数组 data1 = np.array([1, 2, 3])
# 创建一个二维数组 data2 = np.array([[1, 2, 3], [4, 5, 6]])
2.使用zero()函数创建元素值全为0的数组,ones()函数创建元素值都为1的数组
# 创建元素值全是0的数组 np.zeros((3, 4))
# 创建元素值全是1的数组 np.ones((3, 4))
3. empty()函数创建一个新的数组,该数组只分配了内存空间,它里面填充的元素都是随机的
# 创建元素值全是随机数的数组 np.empty((5, 2))
4. arange()函数可以创建一个等差数组,它的功能类似于range(),只不过arange()函数返回的结果是数组,而不是列表
np.arange(1, 20, 5)
一维数组的索引与python列表的功能相差不大
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]
多维数组的切片是沿着行或列的方向选取元素的,我们可以传入一个切片,也可以传入多个切片,还可以将切片与整数索引混合使用
一个切片示例:
arr2d[:2]
取出结果:array([[1, 2, 3],
[4, 5, 6]])
两个切片示例:
arr2d[0:2, 0:2]
取出结果:array([[1, 2],
[4, 5]])
切片与整数索引混合使用的示例:
arr2d[1, :2]
取出结果:array([[1, 2],
[4, 5]])
通用函数(ufunc)是一种针对ndarray中的数据执行元素级运算的函数,函数返回的是一个新的数组
常见的一元通用函数如下表:
常见的二元通用函数如下表:
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)
result结果为:array([1, 6, 7])
通过NumPy库中的相关方法,我们可以很方便地运用Python进行数组的统计汇总
sort()可对数组中的元素进行排序
arr = np.array([[6, 2, 7],
[3, 6, 2],
[4, 3, 2]])
# 沿着编号为0的轴对元素排序 arr.sort(0)
结果为:
array([[3, 2, 2],
[4, 3, 2],
[6, 6, 7]])
all()函数用于判断整个数组中的元素的值是否全部满足条件,如果满足条件返回True,否则返回False
arr = np.array([[1, -2, -7],
[-3, 6, 2],
[-4, 3, 2]])
# arr的所有元素是否都大于0 np.all(arr > 0)
此时返回结果为 False
any()函数用于判断整个数组中的元素至少有一个满足条件就返回True,否则就返回False
arr = np.array([[1, -2, -7],
[-3, 6, 2],
[-4, 3, 2]])
# arr的所有元素是否有一个大于0 np.any(arr > 0)
此时返回结果为 True
与Python的random模块相比,NumPy的random模块功能更多,它增加了一些可以高效生成多种概率分布的样本值的函数
# 随机生成一个二维数组
np.random.rand(3, 3)
random模块中还包括了可以生成服从多种概率分布随机数的其它函数
seed( )函数可以保证生成的随机数具有可预测性,也就是说产生的随机数相同
numpy.random.seed(seed=None)
函数中只有一个seed参数,用于指定随机数生成时所用算法开始的整数值
当调用seed()函数时,如果传递给seed参数的值相同,则每次生成的随机数都是一样的。 当传递的参数值不同或者不传递参数时,则seed()函数的作用跟rand()函数相同,即多次生成随机数且每次生成的随机数都不同