最后
🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[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提供了多种高级索引技巧,用于访问数组的特定位置。以下是三种常用的高级索引方法:
-
- 整数数组索引:使用一个整数数组作为索引,可以选择数组中的特定元素。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
# 使用整数数组索引获取指定位置的元素
indices = np.array([1, 3])
result = a[indices]
print(result)
输出:
[2, 4]
-
- 布尔数组索引:使用一个布尔数组作为索引,可以根据布尔数组的元素值来选择数组中的元素。
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]
-
- 花式索引(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提供了一些方便的函数来操作数组,包括连接数组、分割数组、改变数组形状和交换数组维度等。
-
- 连接数组:使用
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]]
-
- 分割数组:使用
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 轴(行)上进行拆分。
-
- 改变数组形状:使用
np.reshape()
函数改变数组的形状
- 改变数组形状:使用
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
# 将数组转换为2x3的形状
result = np.reshape(a, (2, 3))
print(result)
输出:
[[1, 2, 3]
[4, 5, 6]]
-
- 交换数组维度:使用
np.transpose()
函数交换数组的维度
- 交换数组维度:使用
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
# 交换数组的维度
result = np.transpose(a)
print(result)
输出:
[[1, 4]
[2, 5]
[3, 6]]
4.4 ufunc函数
ufunc(universal functions)是一种可以对数组进行元素级运算的函数。NumPy提供了许多ufunc函数,如np.add()
、np.subtract()
、np.multiply()
和np.divide()
等。以下是一个简单的示例:
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!