一、numpy是什么?
扩展库numpy是Python支持科学计算的重要扩展库,是数据分析和科学计算领域如scipy、pandas、sklearn 等众多扩展库中的必备扩展库之一,提供了强大的N维数组及其相关运算、复杂的广播函数、C/C++和Fortran代码集成工具以及线性代数、傅里叶变换和随机数生成等功能。本章童点介绍数组与矩阵及其相关运算,为学习和理解后面章节中的数据分析、机器学习打下良好的基础。
简单来说就是你用来为人工智能领域打基础的东西,私话说得好,基础不牢,地动山摇嘛~
所以这个地方可要好好学习哦~~
二、numpy数组
在numpy中使用的不是python自带的数据类型list
,而是numpy中的ndarray
那为什么使用ndarray
而不是使用list
呢?
因为ndarray是由c/c++写出来的,占用内存更小,使用速度更快
创建一个ndarray的方法有很多,这里说下使用array方法转化的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/26 22:22 # @Version: 1.0 import numpy as np li = [ 1 , 2 , 3 ] tp = ( 1 , 2 , 3 ) nday1 = np.array(li) nday2 = np.array(tp) print ( "*****类型*****" ) print ( type (nday1)) print ( type (nday2)) print ( "*****数组*****" ) print (nday1) print (nday2) |
输出结果:
1
2
3
4
5
6
|
*****类型***** <class 'numpy.ndarray'> <class 'numpy.ndarray'> *****数组***** [1 2 3] [1 2 3] |
2.1 数组使用
如果元素相同的话,可以进行加减乘除
在元素个数相同的情况下,可以进行数组间的加减
在元素个数相同的情况下,可以进行数组间的乘除
对某个数进行的乘除,可以自动进行到所有元素
看例子理解:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/26 22:22 # @Version: 1.0 import numpy as np li = [ 1 , 2 , 3 ] # 列表 tp = ( 1 , 2 , 3 ) # 元组 nday1 = np.array(li) # 内置方法将列表转为ndarray nday2 = np.array(tp) # 内置方法将元组转为ndarray nday3 = np.array( range ( 5 )) # 使用range内置函数方法生成ndarray连续数组 nday4 = np.array( range ( 5 , 10 )) # 使用range内置函数方法生成ndarray连续数组 print ( "*****类型*****" ) print ( type (nday1)) print ( type (nday2)) print ( type (nday3)) print ( type (nday4)) print ( "*****数组*****" ) print (nday1) print (nday2) print (nday3) print (nday4) print ( "*****数组加减*****" ) print (nday2 + nday1) print (nday2 - nday1) print (nday4 - nday3) print (nday3 + nday4) # 在元素个数相同的情况下,可以进行数组间的加减 print ( "*****数组乘除*****" ) print (nday2 * nday1) print (nday2 / / nday1) print (nday4 * nday3) print (nday4 / / nday3) # 在元素个数相同的情况下,可以进行数组间的乘除 print (nday1 * 3 ) print (nday2 / / 2 ) print (nday3 * 2 ) print (nday4 / / 2 ) # 对某个数进行的乘除,可以自动进行到所有元素 |
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
*****类型***** <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'> *****数组***** [1 2 3] [1 2 3] [0 1 2 3 4] [5 6 7 8 9] *****数组加减***** [2 4 6] [0 0 0] [5 5 5 5 5] [ 5 7 9 11 13] *****数组乘除***** [1 4 9] [1 1 1] [ 0 6 14 24 36] [0 0 0 0 0] [3 6 9] [0 1 1] [0 2 4 6 8] [2 3 3 4 4] |
2.2 创建数组
刚刚的array()
方法是将列表和元组等迭代对象转为ndarray数组
接下来要说的是自动创建数组
1. 使用empty创建空数组
里面会有初始值,但是数组初始为None
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/28 12:29 # @Version: 1.0 import numpy as np em1 = np.empty( 5 ) # 创建一个长度为5的空数组 em2 = np.empty(( 2 , 2 )) # 创建一个2*2的空二维数组 print ( "一维数组,长度为5" , em1) print ( "二维数组,长度为2*2" , em2) |
输出结果:
1
2
3
4
|
[9.96754604e-312 9.96754614e-312 2.60799828e-310 9.34609789e-307 0.00000000e+000] [[6.95299778e-310 9.96747617e-312] [0.00000000e+000 6.95299776e-310]] |
2. 使用arange函数创建
arange是numpy自带的的一个方法,作用与range这个Python内置函数相差无几,都是生成数组
先导入numpy包
1
|
import numpy as np |
然后创建数组
1
2
3
4
5
6
7
8
9
10
11
12
|
print ( "*****ararge创建数组*****" ) aran_arr1 = np.arange( 5 ) aran_arr2 = np.arange( 5 , 10 ) print ( "*****类型*****" ) print ( type (aran_arr1)) print ( type (aran_arr2)) print ( "*****数组*****" ) print (aran_arr1) print (aran_arr2) |
3. 使用zeros函数生成数组
zeros函数是numpy自带的方法,作用是生成指定数量的全0一维数组,全0二维数组等
看下面的例子:
生成一个具有三个元素的一维数组和一个具有五个元素的一维数组:
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/27 21:31 # @Version: 1.0 import numpy as np zero_arr = np.zeros( 3 ) zrro_arr2 = np.zeros( 5 ) print (zero_arr) print (zrro_arr2) |
运行结果:
[0. 0. 0.]
[0. 0. 0. 0. 0.]
当然这只是一位数组,你还可以生成二维数组,也就是矩阵
使用如下代码可以生成一个三行三列的矩阵
1
|
zero_arr3 = np.zeros(( 3 , 3 )) |
输出看看:
1
|
print (zero - arr3) |
运行结果:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
4. ones函数生成数组
使用ones函数生成全1函数,方法同zeros
1
2
3
|
import numpy as np ones_arr1 = np.ones( 3 ) |
输出结果:
[1. 1. 1.]
生成一个三行三列的矩阵
1
2
3
|
import numpy as np ones_arr2 = np.ones(( 3 , 3 )) |
输出结果:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
5. diag函数生成对角矩阵
什么是对角矩阵?你应该听说过对角线,矩阵就是生成在对角线上的矩阵
函数参数是一个元祖
看代码和运行结果能够理解的更深刻
1
2
3
|
import numpy as np diag_arr = np.diag(( 4 , 3 , 2 , 1 )) |
将diag_arr的输出的结果为:
[[4 0 0 0]
[0 3 0 0]
[0 0 2 0]
[0 0 0 1]]
看,对角线是不是你函数的参数,这下理解了吧
6. N维数组
N维数组就是多维数组,可以理解为数组里面还是数组,里面还是数组,可以参照这个形式
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
这个概念确实有点抽象,有点难理解。这就是一个三维数组,是通过三维列表使用array方法转换成ndarray的
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/27 13:29 # @Version: 1.0 import numpy as np li = [ [[ 1 , 2 ], [ 3 , 4 ]], [[ 5 , 6 ], [ 7 , 8 ]] ] te1 = np.array(li) print (te1) |
当然,二维数组也算是N维数组
2.3 访问数组元素
numpy自带了一个insert
函数,可以往数组中插入元素
看实例:
1
2
3
|
li = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 2 , 4 , 6 , 8 ]] gb1 = np.array(li) np.insert(gb1, 1 , [ 1 , 2 , 3 , 4 ]) |
输出结果:
[1 1 2 3 4 2 3 4 5 6 7 8 2 4 6 8]
还有一个自带的add函数,可以进行数组的相加减
数组嘛,可以使用下标来获取数组元素
1
2
3
4
5
|
import numpy as np li1 = [ 1 , 2 , 3 , 4 ] gb2 = np.array(li1) print (gb2[ 1 ]) |
输出结果为:
2
当然,它是一个数组,你理所应当的也可以使用循环语句来遍历数组
三、了解矩阵
数组是数组,矩阵是矩阵。
数组是一种数据结构,可以存储多种数据,可以有多维
矩阵是数学中的一个概念,只能存放数字,并且只能是二维的形式
生成矩阵的方法就和生成N维数组的方法是一样的
先使用列表创建二维列表,然后再使用numpy的方法转成矩阵,当然也有好几中生成矩阵的方法
1
2
3
4
5
6
|
import numpy as np li = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ]] j1 = np.matrix(li) print (j1) print ( type (j1)) print (j1.dtype) |
输出该矩阵:
1
2
3
4
|
输出矩阵: [[1 2 3 4] [5 6 7 8]] 矩阵在Python的类型: <class 'numpy.matrix'> 在numpy中的类型: int32 |
矩阵可以进行各种数学运算,在numpy中都得到了很好的支持,这里就不细说了
3.1 广播
何为广播,广播就是能将你的东西发送到各个区域,一般在计算机中是将信息发送到局域网络中的每个计算机中。
而在numpy中也有广播,只不过他是将元素自动补到数组,矩阵上,就像你在上面看到的,一个数组乘除一个元素,数组中的所有元素都会乘这个数
1
2
3
4
|
import numpy as np li1 = [ 1 , 2 , 3 , 4 ] print (np.array(li1) * 10 ) |
输出结果:
[10 20 30 40]
这个就是广播,就是将数字10播到li转成的数组中,能够让数组所有元素都乘10。
而不同维度的数组也可以这样
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/27 13:40 # @Version: 1.0 import numpy as np li = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 2 , 4 , 6 , 8 ]] gb1 = np.array(li) li1 = [ 1 , 2 , 3 , 4 ] gb2 = np.array(li1) print (gb1 * gb2) |
将一维数组的每个元素挨个广播到二维数组,前提是:
二维数组中的一维数组的个数与一维数组的个数是相同的
运行结果:
[[ 1 4 9 16]
[ 5 12 21 32]
[ 2 8 18 32]]
以上就是python扩展库numpy入门教程的详细内容,更多关于numpy库入门的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/m0_52883898/article/details/120928439