数值计算工具-Numpy
1.数组的修改(数组元素以及数组维度的修改)
#数组的修改(数组元素以及数组维度的修改)
import numpy as np
a=np.array([[1,2],[3,4],[5,6]])
print("\n",a)
a[1,1]=0 #修改第2行第2列元素为0
print("\n",a)
b=np.delete(a,2,axis=0) #删除数组第3行
print("\n",b)
c=np.delete(a,0,axis=1) #删除数组第1列
print("\n",c)
d=np.append(a,[[7,8]],axis=0) #增加一行
print("\n",d)
e=np.append(a,[[9],[10],[11]],axis=1) #增加一列
print("\n",e)
运行结果:
[[1 2]
[3 4]
[5 6]]
[[1 2]
[3 0]
[5 6]]
[[1 2]
[3 0]]
[[2]
[0]
[6]]
[[1 2]
[3 0]
[5 6]
[7 8]]
[[ 1 2 9]
[ 3 0 10]
[ 5 6 11]]
- reshape 和 resize变形
#reshape 和 resize变形
import numpy as np
a=np.arange(4).reshape(2,2)
b=np.arange(4).reshape(2,2)
print(a.reshape(4,),'\n',a) #返回视图,a本身不变
print('\n')
print(b.resize(4,),'\n',b) #没有返回,a改变了
运行结果:
[0 1 2 3]
[[0 1]
[2 3]]
None
[0 1 2 3]
3.数组降维
#数组降维
import numpy as np
a=np.arange(4).reshape(2,2)
print(a.reshape(-1),'\n',a) #返回视图,a本身不变
print(a.reshape(4),'\n',a)
b=np.arange(4).reshape(2,2)
print(b.ravel(),'\n',b) #返回b的视图
c=np.arange(4).reshape(2,2)
print(c.flatten(),'\n',c) #返回真实数组,需要分配内存空间
运行结果:
[0 1 2 3]
[[0 1]
[2 3]]
[0 1 2 3]
[[0 1]
[2 3]]
[0 1 2 3]
[[0 1]
[2 3]]
[0 1 2 3]
[[0 1]
[2 3]]
- 数组分割
#数组分割
import numpy as np
a=np.arange(6).reshape(2,3) #构造两行三列的数组
b=np.hsplit(a,3) #把a平均分成2个列数组
c=np.vsplit(a,2) #把a平均分为2行数组
print(a,'\n','\n',b[1],'\n','\n',c[1],'\n') #输出的也是三个列表
运行结果:
[[0 1 2]
[3 4 5]]
[[1]
[4]]
[[3 4 5]]
- 数组简单计算
#在NumPy库中,实现四则运算既可以使用运算符号+、-、*、/,
#也可以使用函数add、substract、multiply、divide。
#需要注意的是,函数只能接受两个对象的运算,如果需要多个对象的运算,就得使用嵌套方法。
#另外还有三个数学运算符,分别是余数、整除和幂次,可以使用符号%、//、**,也可以使用函数fmod、modf和power。
#但是整除的函数应用会稍微复杂一点,需要写成np.modf(a/b)[1]的格式,
#因为modf可以返回数值的小数部分和整数部分,而整数部分就是要取的整数值。
‘’’
参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
2)两个参数时,第一个参数为起点,第二个参数为终点-1,步长取默认值1。
3)三个参数时,第一个参数为起点,第二个参数为终点-1,第三个参数为步长。其中步长支持小数。
‘’’
#数组简单运算
import numpy as np
a=np.arange(10,15)
b=np.arange(5,10)
c=a+b
d=a*b
e1=np.modf(a/b)[0] #小数部分
e2=np.modf(a/b)[1] #整数部分
print(a,'\n',b,'\n',c,'\n',d,'\n',e1,'\n',e2,'\n')
运行结果:
[10 11 12 13 14]
[5 6 7 8 9]
[15 17 19 21 23]
[ 50 66 84 104 126]
[0. 0.83333333 0.71428571 0.625 0.55555556]
[2. 1. 1. 1. 1.]
6.比较计算
#数值计算
import numpy as np
a=np.array([[1,2,5],[10,13,16]])
b=np.array([[5,7,9],[3,9,0]])
print(a[a>b]) #取出a>b的所有元素
print(a[a>5]) #取出a>5的所有元素
print(np.where(a>5,-1,a)) #将a>5的元素改为-1
print(np.where(a>5,-1,0)) #将a>5的元素改为1,否则为0
运行结果:
[10 13 16]
[10 13 16]
[[ 1 2 5]
[-1 -1 -1]]
[[ 0 0 0]
[-1 -1 -1]]
7.广播机制
‘’’
广播(Broadcasting)是指不同形状的数组之间执行算术运算的方式。
当使用ufunc函数进行数组计算时,ufunc函数会对两个数组的对应元素进行计算。
进行这种计算的前提是两个数组的维度相容。
若两个数组的维度不相容时,则NumPy会实行广播机制。
但是数组的广播功能是有规则的,如果不满足这些规则,运算时就会出错。数组的主要广播规则为:
(1)各输入数组的维度可以不相等,但必须确保从右到左的对应维度值相等。
(2)如果对应维度值不相等,就必须保证其中一个为1。
‘’’
‘’’
reshape(行数,列数)常用来更改数据的行列数目
这里-1是指未设定行数,程序随机分配,所以这里-1表示任一正整数
所以reshape(-1,1)表示(任意行,1列)
‘’’
#广播机制实例
import numpy as np
a=np.arange(0,20,10).reshape(-1,1) #变形为1列的数组,行数自动计算
b=np.arange(0,3)
print(a)
print(b)
print(a+b)
运行结果:
[[ 0]
[10]]
[0 1 2]
[[ 0 1 2]
[10 11 12]]