NumPy
2021/9/5 6:07:58
本文主要是介绍NumPy,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
NumPy广泛用于科学计算,提供了ndarray(n-dimension array, n维数组)对象以及作用于ndarray上的一系列操作。通常按如下方式导入NumPy:
import numpy as np
1. 创建ndarray
ndarray有多种创建方式。可以直接通过Python的列表创建。例如:
a1 = np.array([1, 2, 3, 4, 5]) # a1是一维数组 a2 = np.array([[1, 2, 3], [4, 5, 6]]) # a2是二维数组
也可以通过NumPy的内置方法创建数组,例如:
np.zeros(10) # 大小为10的一维数组。所有元素都为0 np.ones((2,3)) # 大小为2x3的二维数组,所有元素都为1 np.full((3,4), 8.8) # 大小为3x4的二维数组, 所有元素都为8.8 np.arange(0, 10, 2) # 类似于Python的内置range函数, 在[0, 20)内以2为步长创建一维数组
reshape方法可以改变ndarray的形状。例如将一个包含9个元素的一维数组改变为3x3的二维数组:
arr2 = np.arange(0, 9) """ 此时arr2为 array([0, 1, 2, 3, 4, 5, 6, 7, 8]) """ arr2 = arr2.reshape((3,3)) """ 此时arr2为 array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) """
原始ndarray的大小必须与变形后的ndarray大小一致,否则会报错。如果不知道ndarray的具体大小,可以向reshape方法的其中一个维度大小传入-1,NumPy将自动完成计算。
2. ndarray的属性
ndarray的元素具有相同的数据类型,常见的数据类型有:bool, int32, int64, uint32, uint64, float32, float64等. 创建ndarray的方法一般都提供可选参数dtype以指定元素的数据类型,默认为浮点数类型。可以通过ndrray的dtype属性得知其元素的数据类型。此外,ndarray还有如下常见属性:
# 创建一个2x3的二维数组arr, 元素的数据类型为32位整型 arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32) arr.dtype # arr中元素的数据类型, 此处输出为dtype('int32') arr.ndim # arr的维度, arr是二维数组,故输出为2 arr.shape # arr的形状, 此处输出为(2, 3) arr.size # arr的大小, 此处输出为6
3. 索引与切片
索引和Python的列表类似,若要访问ndarray中某一元素,对于一维例如arr[0], 对于二维例如arr[0, 1], 对于三维例如arr[0, 1, 0], 以此类推,负数索引同样也可以使用。例如:
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32) arr[0, 1] # 第0行第1列, 值为2 arr[1, -1] # 访问第1行最后一个元素, 值为6
对于ndarray的切片操作,每个维度可通过start:stop:step访问,默认start=0, stop=所在维度的大小,step=1. 对于一维有arr[start:end:stop], 对于二维有arr[start:end:stop, start:end:stop], 以此类推。例如:
arr3 = np.arange(0, 12).reshape((3,4)) """ array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) """ arr3[0:2, 1:3] # 取arr3的第0,1行, 第1,2列 """ array([[1, 2], [5, 6]]) """ arr3[1, :] # 第1行, 可简写为arr3[1]. 输出为array([4, 5, 6, 7]) arr3[:, 1] # 第1列, 输出为array([1, 5, 9]) arr3[1, ::-1] # 取arr3的第一行,并逆序, 输出为array([7, 6, 5, 4]) arr3[::-1, ::-1] # 先对行逆序, 再对列逆序 """ array([[11, 10, 9, 8], [ 7, 6, 5, 4], [ 3, 2, 1, 0]]) """
需要注意的是,ndarray的切片操作返回的结果称为原ndarray数据的一个视图,而不是原数据的副本。也就是说,对切片元素的修改会导致原ndarray相应数据的修改。例如:
arr4 = np.arange(0, 10, 2) # arr4为array([0, 2, 4, 6, 8]) arr5 = arr4[:3] # arr5为array([0, 2, 4]) arr5[1] = 100 """ 执行上述操作后, arr5 = array([ 0, 100, 4]) arr4 = array([ 0, 100, 4, 6, 8]) """
返回视图而不是原数据的副本可以减少大型ndarray的复制操作所带来的巨大开销。如果确实需要复制ndarray, 通过调用arr.copy()得到arr的一个副本。
4. 数学函数
NumPy中定义了一系列数学运算和数学函数操作,例如:
- 重载操作符的运算:加、减、乘、除、幂、取模、取整、取绝对值等,这些操作也可以通过NumPy的内置函数使用,例如np.add, np.multiply, np.power.
- 三角函数与反三角函数。例如np.sin, np.cos, np.tan, np.arcsin, np.arccos, np.arctan.
- 指数与对数函数。例如np.exp, np.exp2, np.power(10, x), np.log, np.log2, np.log10.
5. 统计函数
NumPy还有一些用于计算带有统计属性的函数,例如:
- 求和、求积:np.sum, np.prod.
- 最大值、最小值、中位数:np.max, np.min, np.median.
- 最大值的索引、最小值的索引:np.argmax, np.argmin.(返回一个整数,相对起始元素的下标,而不是表示其位置的元组)
- 任一、所有:np.any, np.all.
- 均值、标准差、方差:np.mean, np.std, np.var.
- 百分位数:np.percentile. 例如,若np.percentile(arr, 75)的返回值为3, 则说明arr中75%的数据都不大于3.
上述操作可以指定可选参数axis指定沿着哪个轴操作。这些操作也可以直接通过ndarray访问, 例如arr.sum().
6. 比较
比较操作符得到一个同等大小的ndarray, 元素类型为bool. 例如:
arr = np.arange(10, 50, 2).reshape(4,5) """ array([[10, 12, 14, 16, 18], [20, 22, 24, 26, 28], [30, 32, 34, 36, 38], [40, 42, 44, 46, 48]]) """ arr < 36 """ array([[ True, True, True, True, True], [ True, True, True, True, True], [ True, True, True, False, False], [False, False, False, False, False]]) """
可利用上述统计函数对返回的布尔类型的ndarray操作。此外,还可以利用此ndarray选择特定元素。例如:
arr = np.arange(10, 50, 2).reshape(4,5) arr[ arr % 4 == 0 ] # 选择 # array([12, 16, 20, 24, 28, 32, 36, 40, 44, 48]), 这里得到的是一维ndarray,
这篇关于NumPy的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?