P叔带你详解Python模块NumPy_numpy模块 python(1)

2.安装使用NumPy

首先,我们需要确保已经安装了NumPy库。可以通过在终端或命令提示符中运行以下命令来安装NumPy:

pip install numpy

安装完成后,我们就可以开始使用NumPy。

#导入NumPy库  
import numpy as np

3.NumPy创建数组

NumPy最强大的功能之一是创建多维数组。我们可以使用NumPy的array()函数来创建数组。

例如,我们可以创建一个一维数组:

arr = np.array([1, 2, 3, 4, 5])  
print(arr)

输出:

[1 2 3 4 5]

我们也可以创建一个二维数组:

arr = np.array([[1, 2, 3], [4, 5, 6]])  
print(arr)

输出:

[[1 2 3]  
 [4 5 6]]

3.1 数组属性

NumPy数组有许多重要的属性,可以帮助我们了解数组的特征。

arr = np.array([1, 2, 3, 4, 5])  
print("数组形状:", arr.shape)  
print("数组维度:", arr.ndim)  
print("数组元素总数:", arr.size)  
print("数组数据类型:", arr.dtype)

输出:

数组形状: (5,)  
数组维度: 1  
数组元素总数: 5  
数组数据类型: int32

3.2 数组操作

NumPy提供了许多数组操作的功能,例如数组索引、切片和形状变换等。

arr = np.array([1, 2, 3, 4, 5])  
print("第一个元素:", arr[0])  
print("前两个元素:", arr[:2])  
print("倒数三个元素:", arr[-3:])

输出:

第一个元素: 1  
前两个元素: [1 2]  
倒数三个元素: [3 4 5]

3.3 数组运算

NumPy支持对数组进行基本的数学运算,例如加法、减法、乘法和除法。

arr1 = np.array([1, 2, 3])  
arr2 = np.array([4, 5, 6])  
  
print("加法:", arr1 + arr2)  
print("减法:", arr1 - arr2)  
print("乘法:", arr1 * arr2)  
print("除法:", arr1 / arr2)

输出:

加法: [5 7 9]  
减法: [-3 -3 -3]  
乘法: [ 4 10 18]  
除法: [0.25 0.4  0.5 ]

3.4 常用函数

NumPy还提供了许多常用的函数,例如求和、平均值、最大值和最小值。

arr = np.array([1, 2, 3, 4, 5])  
  
print("求和:", np.sum(arr))  
print("平均值:", np.mean(arr))  
print("最大值:", np.max(arr))  
print("最小值:", np.min(arr))

输出为:

求和: 15  
平均值: 3.0  
最大值: 5  
最小值: 1

4. NumPy高级用法

4.1 广播(Broadcasting)

NumPy数组广播是一种自动执行元素级操作的机制。它可以使具有不同形状的数组在算术运算中表现得像具有相同形状的数组一样。这种机制大大简化了对不同形状数组之间的操作。

下面是一个示例代码,演示了如何使用广播来执行数组的加法运算:

import numpy as np  
  
arr1 = np.array([[1, 2, 3],  
                 [4, 5, 6]])  
  
arr2 = np.array([10, 20, 30])  
  
result = arr1 + arr2  
  
print(result)

在上面的代码中,arr1 是一个形状为 (2, 3) 的二维数组,arr2 是一个形状为 (3,) 的一维数组。根据广播规则,arr2 实际上被扩展为了形状为 (2, 3) 的二维数组,其中每一行都是 arr2。然后,数组 arr1 和扩展后的 arr2 进行元素级加法运算,得到了最终的结果。

输出结果为:

[[11 22 33]  
 [14 25 36]]

通过广播机制,我们可以直接对不同大小的数组执行加法操作,而不需要手动进行数组形状的调整。这样可以大大简化代码,并提高效率。同时,广播机制也可以应用于其他的 NumPy 函数和运算中。

4.2 高级索引

NumPy提供了多种高级索引技巧,用于访问数组的特定位置。以下是三种常用的高级索引方法:

    1. 整数数组索引:使用一个整数数组作为索引,可以选择数组中的特定元素。
import numpy as np  
  
a = np.array([1, 2, 3, 4, 5])  
  
# 使用整数数组索引获取指定位置的元素  
indices = np.array([1, 3])  
  
result = a[indices]  
  
print(result)

输出:

[2, 4]

    1. 布尔数组索引:使用一个布尔数组作为索引,可以根据布尔数组的元素值来选择数组中的元素。
import numpy as np  
  
a = np.array([1, 2, 3, 4, 5])  
  
# 使用布尔数组索引选择大于3的元素  
mask = a > 3  
  
result = a[mask]  
  
print(result)

输出:

[4, 5]

还可以按布尔数组进行匹配

arr = np.array([1, 2, 3, 4, 5])  
mask = np.array([True, False, True, False, True])  # 选择为True的元素  
print(arr[mask])  # 输出 [1 3 5]

    1. 花式索引(Fancy indexing):使用整数数组或整数列表作为索引,可以根据指定的索引位置选择数组中的元素。
import numpy as np  
  
a = np.array([1, 2, 3, 4, 5])  
  
# 使用花式索引获取指定位置的元素  
indices = np.array([0, 2, 4])  
  
result = a[indices]  
  
print(result)

输出:

array([1, 3, 5])

多维数组的操作与此类似,如果有时间,不妨在上述例子上动手试一下,记住,如果使用负整数,索引会从末尾倒着开始哦。

4.3 数组操作

NumPy提供了一些方便的函数来操作数组,包括连接数组、分割数组、改变数组形状和交换数组维度等。

    1. 连接数组:使用np.concatenate()函数沿指定轴连接数组
import numpy as np  
  
a = np.array([[1, 2],  
              [3, 4]])  
  
b = np.array([[5, 6],  
              [7, 8]])  
  
# 沿行方向连接数组  
result = np.concatenate((a, b), axis=0)  
  
print(result)

输出:

[[1, 2]  
 [3, 4]  
 [5, 6]  
 [7, 8]]

    1. 分割数组:使用np.split()函数将数组分割为多个子数组
import numpy as np  
  
a = np.array([1, 2, 3, 4, 5])  
  
# 将数组分割为3个子数组  
result = np.array_split(a, 3)  
  
print(result)

输出:

[array([1, 2]), array([3, 4]), array([5])]

np.array_split()是 NumPy 中用于将数组拆分成多个子数组的函数。它接受三个参数:数组、拆分的位置或拆分的索引、拆分的轴。当我们拆分多维数组时,又会发生什么呢?

import numpy as np  
  
# 创建一个数组  
arr = np.arange(1, 13).reshape(3, 4)  
print("原始数组:")  
print(arr)  
  
# 对数组进行拆分  
sub_arrays = np.array_split(arr, 2, axis=1)  
print("\n拆分后的子数组:")  
for sub_arr in sub_arrays:  
    print(sub_arr)

运行这段代码,输出将是:

原始数组:  
[[ 1  2  3  4]  
 [ 5  6  7  8]  
 [ 9 10 11 12]]  
  
拆分后的子数组:  
[[ 1  2]  
 [ 5  6]  
 [ 9 10]]  
[[ 3  4]  
 [ 7  8]  
 [11 12]]

wahoo,很明显,拆分根据axis参数,只获取二维原始数组(2-D)中的前2列,即在原始二维数组arr的每个元素下标为axis=1的位置停止了。

在这个示例中,我们创建了一个 3 行 4 列的数组 arr,然后使用 np.array_split(arr, 2, axis=1) 将数组拆分成两个子数组。拆分的结果是一个包含两个数组的列表 sub_arrays,要注意的是,拆分的轴参数axis是可选的。如果没有提供轴参数,np.array_split() 默认在 0 轴(行)上进行拆分。

    1. 改变数组形状:使用np.reshape()函数改变数组的形状
import numpy as np  
  
a = np.array([[1, 2, 3],  
              [4, 5, 6]])  
  
# 将数组转换为2x3的形状  
result = np.reshape(a, (2, 3))  
  
print(result)

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值