|
本帖最后由 BZR 于 7-28-2025 09:56 编辑
NumPy
今天来聊聊NumPy。NumPy是Python中用于科学计算的库。它提供了多维数组对象、各种衍生对象(如掩码数组和矩阵)以及一系列用于对数组进行快速运算的函数,包括数学运算、逻辑运算、形状操作、排序、选择、输入/输出、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。
同时,Python的Pandas、matplotlib以及tensorflow库也都是以numpy为基础进行编写的。
它作为一个Python的库是被非专业和专业用户编程下载数量总数排名第二(第一是.NET),可见它的实用性。(以下为2024的数据)
1. 安装
安装numpy,只需要在Terminal中输入:
之后,在IDLE中,我们会
这样在调用它的时候直接使用np这个名字就行了。
2. 数组访问
numpy数组的基础和Python的列表大差不差,但是要注意的是numpy库本身是用C语言编写来专门针对线性代数的,内部还是有区别的。
要创建一个数组,只要输入np.array()加上list:
- a = np.array([1, 2, 3, 4, 5])
复制代码 np.array也可以执行Python list的访问下标、切片等操作(np.array输出每个项之间用空格连接,没有逗号):
- print(a[0]) # 1
- print(a[:-2]) # [1 2 3]
复制代码 当然,在numpy中,对多位数组的操作比用list来的方便。- a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- print(a[0]) # [1 2 3]
- print(a[0, 1]) # 2
复制代码
讲点不一样的:
- a1 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
- print(a1.shape) # (2, 2, 2)
复制代码 array.shape会输出这个数组几个项、每个项有多少个子项、...,就是几行几列。
array.ndim会输出这个数组的维度。
array.size会输出这个数组含有多少个项。
3. 数组填充
有时候你不想自己手动输入一个数组,那么可以试试numpy提供的语法。
np.full的语法为:np.full(shape, fill_value),上述代码是生成一个形状为(3, 4)、项都为5的数组。
np.zero更直接,就是生成一个形状为shape的、项全为0的数组。np.ones一样,区别是项全为1。- a = np.arange(0, 105, 5)
- print(a)
- '''
- [ 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85
- 90 95 100]
- '''
复制代码 np.arange(注意是arange,不是arrange)的语法和for i in range()一模一样,都是(start, stop(, step)),但是它把输出结果封装到了一个数组里。
np.arange()如果不输入start的话,默认从0开始。和for i in range()一样,最后是不包括stop的。
- a = np.linspace(0, 1000, 21)
- print(a)
- '''
- [ 0. 50. 100. 150. 200. 250. 300. 350. 400. 450. 500. 550.
- 600. 650. 700. 750. 800. 850. 900. 950. 1000.]
- '''
复制代码 np.linspace在指定的区间内返回等间隔的数字,上述代码就是在0到1000中等距离分出21个数字(注意首尾都算)。
4. 运算
首先,numpy array和Python list的运算就是不一样的。
- lst1 = [1, 2, 3]
- lst2 = [4, 5, 6]
- a1 = np.array(lst1)
- a2 = np.array(lst2)
复制代码- print(lst1 * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
- print(a1 * 3) # [3 6 9]
复制代码 单一Python list的乘法是将list按顺序重复n遍,而numpy array的乘法是把数组中的每一项都进行乘法这个数学运算。
- print(lst1 + 5) # TypeError: can only concatenate list (not "int") to list
- print(a1 + 5) # [6 7 8]
复制代码 Python list不允许list加不是list的值,而numpy array是将数组的每项都加n。
- print(lst1 + lst2) # [1, 2, 3, 4, 5, 6]
- print(a1 + a2) # [5 7 9]
复制代码 Python中list之间的相加是把list 2加到list 1的后面,而numpy array是把两个数组对应下标的数字相加。- print(a1 - a2) # [-3 -3 -3]
- print(a1 / a2) # [0.25 0.4 0.5 ]
- print(a1 % a2) # [1 2 3]
- print(np.sqrt(a1)) # [1. 1.41421356 1.73205081]
复制代码 同样,numpy array可以适应大部分基本运算,而在list中上述代码就会报错。
- a1 = np.array([1, 2, 3])
- a2 = np.array([[1], [2]])
复制代码 这里介绍一个有趣的语法:如果你把两个shape不同的数组进行运算(当然两个数组的shape得是比较兼容的,要不然压根计算不了),numpy会把单一项数多的数组的每一项分别与第二个数组的每一项相加。上述代码就是[1, 2, 3]分别加1再加2。
当然,numpy有数不胜数的数学运算(sqrt, sin, cos, tan, round, ...),但在这张帖子中一一列举没有意义,所以有需要的可以访问numpy官网:https://numpy.org/doc/stable/reference/routines.math.html
5. 数组操作
我们也可以对数组做添加、插入、删除项等操作。
- a = numpy.array([1, 2, 3])
复制代码 np.append(array, values)和Python list的append操作很像,只不过需要指定数组名称。而且此类操作不会更新原有的数组,所以我们还需要额外赋值:
- a = np.append(a, [7, 8, 9])
复制代码- a = np.insert(a, 3, [4, 5, 6])
复制代码 np.insert(array, obj, values),这个也和Python list很像,指定数组、下标和要插入的值。
- a = np.array([[1, 2, 3], [4, 5, 6]])
复制代码 np.delete的语法会有一点迷惑性,如果只给定数组名和下标,就是np.delete(array, obj),那么会无视维度、删除下标为n的项,输出也会无视维度。
- print(np.delete(a, 1, 0)) # [[1 2 3]]
复制代码 如果给定数组名、下标和axis(不知道什么翻译成中文最准确),也就是np.delete(array, obj, axis):
axis = 0:删除下标为n的“行”。在上面的例子中,删除的就是下标为1的行[4, 5, 6]
axis = 1:删除下标为n的“列”。在上面的例子中,删除的就是下标为1的列[[2], [6]]
当然,axis可以>1,但是此时的数组的维度也会上升,再用np.delete语法理解上可能会比较费劲。
6. 数组结构操作
我们也可以对数组的结构进行更改。
- a = np.array([[1, 2, 3],
- [4, 5, 6],
- [7, 8, 9],
- [10, 11, 12]])
复制代码 此时a.shape = (4, 3)
- print(a.reshape(3, 4))
- '''
- [[ 1 2 3 4]
- [ 5 6 7 8]
- [ 9 10 11 12]]
- '''
复制代码 reshape函数可以让我们把数组更改到指定结构。
- print(a.reshape(12,)) # [ 1 2 3 4 5 6 7 8 9 10 11 12]
复制代码 注意:reshape(12,)和reshape(12,1)是不一样的。前者表示把a的12个项转化成一个一维表格,而后者表示把a的12个项转化成12个1个项的数组。
- print(a.flatten()) # [ 1 2 3 4 5 6 7 8 9 10 11 12]
复制代码 flatten()顾名思义,就是把一个数组给“拍扁了”,和上述的reshape(12,)有相同的作用。- print(a.T)
- '''
- [[ 1 4 7 10]
- [ 2 5 8 11]
- [ 3 6 9 12]]
- '''
复制代码 T是transpose的缩写,是把一个二维数组的行和列进行调转。
以上就是NumPy的一些大致内容了,NumPy的功能远远不止这些,实用性和专业性很高,是做科学运算和数据处理的绝佳工具!(如果想要再研究的可以去官网numpy.org查找)
注:由于字数限制,补充的会放在楼下
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|