python中NumPy基本操作
沉睡中的主角 人气:0Numpy是什么
很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。如果接触过matlab、scilab,那么numpy很好入手。
NumPy是一个高性能的科学计算和数据分析基础包。
NumPy的安装
NumPy的安装相对简单,我们可以通过Anaconda中的命令进行安装,也可以通过“pip install numpy" 语句对NumPy进行安装。如果需要验证NumPy是否安装成功,则可以在NumPy安装完成后通过输入“import numpy"后运行,看看是否输出报错提示。
多维数组
创建多维数组
import numpy as np #用array来创建 a=np.array([1,2,3]) #创建一维数组 print(a) b=np.array([[1,2,3],[4,5,6]]) #创建高维数组 print(b) #使用NumPy中的ones创建维度指定且元素全是1的数组 c=np.ones([2,3]) #全是1的数组 print(c) c[1,2]=3 #对数组中的元素进行覆盖 print(c) #创建维度制定且元素全为0的数组 d=np.zeros([2,3]) print(d) #创建维度指定且元素全为随机数的数组 e=np.empty([2,3]) print(e)
多维数组的常用属性
ndim:返回统计的数组维数,即维度的数量
#创建维度指定且元素全为随机数的数组 e=np.empty([2,3]) print(e) print(e.ndim)
结果:
[[0. 0. 0.]
[0. 0. 0.]]
2
shape:返回数组的维度值,对返回的结果使用一个数据类型为整型的元组来表示,比如一个二维数组返回的结果为(n,m),那么n和m表示数组中对应维度的数据的长度。如果使用shape输出的是矩阵的维度,那么在输出的(n,m) 中,n表示矩阵的行,m表示矩阵的列。
#创建维度指定且元素全为随机数的数组 e=np.empty([2,3]) print(e) print(e.shape)
结果:
[[0. 0. 0.]
[0. 0. 0.]]
(2, 3)
size:返回要统计的数组中的元素的总数量
#创建维度指定且元素全为随机数的数组 e=np.empty([2,3]) print(e) print(e.size)
结果:
[[0. 0. 0.]
[0. 0. 0.]]
6
dtype:返回数组中的元素的数据类型。不过其显示的数据类型和我们之前定义的变量的数据类型名有所区别,因为这些数据类型都是使用NumPy 进行定义的,而在NumPy中表示数据类型使用的是numpy.int32、numpy.int16和numpy.float64这类格式的名字
#创建维度指定且元素全为随机数的数组 e=np.empty([2,3]) print(e) print(e.dtype)
结果:
[[0. 0. 0.]
[0. 0. 0.]]
float64
多维数组的基本操作
数组的算术运算
数组能够直接进行加法、减法、乘法和除法算术运算
import numpy as np g=np.array([1,2,3]) h=np.array([4,5,6]) print("a-b-",a-b) #打印a-b的结果 print("a+b =",a+b) #打印a+b的结果 print("a/b =",a/b) #打印a/b的结果 print("a*b =",a*b) #打印a*b的结果
结果:
a-b- [-3 -3 -3]
a+b = [5 7 9]
a/b = [0.25 0.4 0.5 ]
a*b = [ 4 10 18]
Process finished with exit code 0
从上面的实例可以看出,虽然数组在构造上类似于矩阵,但是其运算和之前介绍的矩阵运算存在诸多不同:首先,矩阵是不存在除法运算的,但是数组能够进行除法运算:其次,数组的乘法运算机制是通过将位置对应的元素相乘来完成的,和矩阵的乘法运算机制不同。下面来看看如何通过数组实现矩阵乘法运算。
a=np.array([1,2,3]) b=np.array([4,5,6]) print("a-b-",a-b) #打印a-b的结果 print("a+b =",a+b) #打印a+b的结果 print("a/b =",a/b) #打印a/b的结果 print("a*b =",a*b) #打印a*b的结果 c = a.dot(b) print("Matrix1: a*b =",c) #打印a*b的结果 d = np.dot(a,b) print("Matrix2: a*b",c) #打印a*b的结果在运行后,输出的内容
结果:
a-b= [-3 -3 -3]
a+b = [5 7 9]
a/b = [0.25 0.4 0.5 ]
a*b = [ 4 10 18]
Matrix1: a*b = 32
Matrix2: a*b 32
Process finished with exit code 0
在以上代码中使用了两种方法来实现矩阵的乘法运算,其计算结果是一样的。数组和矩阵的算术运算还有一个较大的不同点,就是数组可以直接和标量进行算术运算,但是在矩阵运算中是不可以的。
a = np.array([1,2,3]) print ("a * 2 =",a*2) print("a 1 2 =",a/2) print("a - 2 =",a-2) print("a + 2 =",a+2)
结果:
a * 2 = [2 4 6]
a 1 2 = [0.5 1. 1.5]
a - 2 = [-1 0 1]
a + 2 = [3 4 5]
数组的自身运算
(1)min:默认找出数组的所有元素中值最小的元素,可以通过设置axis的值来按行或者列查找元素中的最小值。
(2) max:默认找出数组的所有元素中值最大的元素,可以通过设置axis的值来按行或者列查找元素中的最大值。
(3) sum:默认对数组中的所有元素进行求和运算,并返回运算结果,同样可以通过设置axis的值来按行或者列对元素进行求和运算。
(4) exp:对数组中的所有元素进行指数运算。
(5) sqrt: 对数组中的所有元素进行平方根运算。
(6) square:对数组中的所有元素进行平方运算。
随机数组
生成随机数在我们平时的应用中是很有用的,在NumPy中有许多方法可以生成不同属性的随机数,以满足在计算中使用随机数字的需求。
(1) seed: 随机因子,在随机数生成器的随机因子被确定后,无论我们运行多少次随机程序,最后生成的数字都是一样的,随机因子更像把随机的过程变成一种 伪随机的机制,不过这有利于结果的复现。
(2) rand: 生成一个在[0,1)范围内满足均匀分布的随机样本数。
(3) randn:生成一个满足平均值为0且方差为1的正太分布随机样本数。
(4)randint:在给定的范围内生成类型为整数的随机样本数。
(5) binomial: 生成-个维度指定且满足二项分布的随机样本数。
(6) beta:生成一个指定维度且满足beta分布的随机样本数。
(7) normal: 生成一个指定维度且满足高斯正太分布的随机样本数。
索引、切片、迭代
在数组中也有索引、切片和迭代,其操作过程和列表类似,不过多维数组相较于一维数组,在索引、切片和迭代等操作上会更复杂。
a = np.arange(10) print(a) #输出整个数组 print(a[:5]) #输出数组的前 五个元素 for i in a: #迭代输出数组的全部元素 print (i)
结果:
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4]
0
1
2
3
4
5
6
7
8
9
Process finished with exit code 0
总结
加载全部内容