1.numpy数组及运算
1.1创建numpy数组
import numpy as np
# 创建一个数组
a=np.array([2,2,3,4])
b=np.array([2,3,4,5],dtype=np.int)
#dtype是用来指定类型。int默认为64,要32时要用int32
c=np.array([[1,2,3],
[4,5,6]])
#生成全部为0的矩阵(3行4列)
d=np.zeros((3,4))
#生成全部为1 的矩阵(3行4列)
e=np.ones((3,4))
#生成10到20的且间隔为2的矩阵
f=np.arange(10,20,2)
#生成一个某行某列的区间矩阵
h=np.arange(12).reshape((3,4))
#生成一个线段
i=np.linspace(1,10,5)
#生成一个2行3列的矩阵
j=np.linspace(1,10,6).reshape((2,3))
1.2.numpy数组的运算
import numpy as np
# 两个矩阵运算
a=np.array([10,20,30,40])
b=np.arange(4)
#生成一个0到3到矩阵
print(a,b)
print(b<3)
c=a-b
d=a+b
e=a*b
f=b**2
# 矩阵与数值运算
z=np.array([1,2,3,4])
print(z*2)
print(z/2)
print(z//2)
print(z+2)
print(z-2)
print(z**2)
# 多重矩阵的运算
m=np.array([[1,1],
[0,1]])
n=np.arange(4).reshape((2,2))
c=a*b#单个相乘
c_dot=np.dot(a,b)#矩阵相乘
c_dot_2=a.dot(b)
print(c)
print(c_dot)
1.3修改数组中的元素
import numpy as np
x=np.arange(8)
#print(x)
# 返回新数组,在尾部追加一个元素
np.append(x,8)
# 返回新数组在指定位置插入元素,下方1为指定的下标索引值
np.insert(x,1,8)
# 使用下标方式来修改数组
x[3]=8
# 多重矩阵修改
y=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
# 修改第一行第三列的元素值
x[0,2]=4
# 切片,把行下标与列下标大于等于1的元素值设置为1
x[1:,1:]=1
# 同时修改多个值
x[1:,1:]=[1,2]
1.4数组中的函数
import numpy as np
a=np.random.random((2,4))
print(a)
print(np.sum(a,axis=1))
print(np.min(a))
print(np.max(a))
#axis=1时,表示列中
#axis=0时,表示在行中操作
A=np.arange(2,14).reshape((3,4))
print(np.argmin(A))
print(np.argmax(A))
#总共12位数,索引最小为0,最大为11
#求平均值的三种方法
print(np.mean(A))
print(A.mean())
print(np.average(A))
#求中位数
print(np.median(A))
#求累加
print(np.cumsum(A))
#求累差
print(np.diff(A))
#找出非零值,输出坐标
print(np.nonzero(A))
#排序逐行
A=np.arange(2,14).reshape((3,4))
print(np.sort(A))
#矩阵的反向
print(np.transpose(A))
#截取矩阵(让所有小于5的数都等于5,让左右大于9的数都等于9)
print(np.clip(A,5,9))
print(np.mean(A,aixs=0))
1.5数组的索引
import numpy as np
A=np.arange(3,15)
print(A)
print(A[3])
B=np.arange(3,15).reshape((3,4))
print(B)
print(B[1][1])
print(B[2,1])
print(B[2,:])#用:代表此行的所有的元素
print(B[1,1:2])#用1:2表示索引坐标的数值
#用for循环,输出各个行
for row in A:
print(row)
#for循环,输出各个列
for column in A:
print(column)
C=np.arange(3,15).reshape((3,4))
print(C)
# 转换为逆矩阵
print(C.T)
# 按行输出
for column in C.T:
print(column)
# 将数组转化为单行的数组
print(C.flatten())
# 遍历单行数组中的所有元素
for item in A.flat:
print(item)
例题
将数组 np.arange(20)转变为 4 行 5 列的二维数组,并执行交换第 1 行和第 2 行,交换第 1 列和第 2 列。
import numpy as np
# 生成一个4行5列的二维数组
a=np.arange(20).reshape(4,5)
print("交换前",'\n',a)
# 交换第一行与第二行,第一列与第二列
a[[0,1],:]=a[[1,0],:]
# [[0,1],:]表示为第一行、第二行,逗号前是表示行的参数,逗号后的表示列,冒号表示所有列
a[:,[0,1]]=a[:,[1,0]]
# [:,[0,1]]表示为第一列、第二列,逗号前是表示行的参数,逗号后的表示列,冒号表示所有行
print("交换后:",'\n',a)
1.6修改数组中符合条件的元素
# 寻找数组 np.random.randint(1,10,size=(5,5))中所有的奇数,并将所有
# 奇数替换为 0.
import numpy as np
a=np.random.randint(1,10,size=(5,5))
# where方法
a[np.where(a%2==1)]=0
print(a)
# 布尔索引
idex=(a%2==1) #布尔索引返回下标
a[idex]=0
print(a)
x=np.random.rand(10)
# 返回的布尔的数组
print(x>0.5)
# 返回符合条件的数组
print(x[x>0.5])
# 测试数组是否全部小于某个值
print(np.all(x<1))
# 可以进行复合运算
print(x[(x%2==0)&(x<1)])
a=np.array([1,2,3])
b=np.array([3,2,1])
# 对数组对应位置上的元素值进行比较
print(a>b)
# 返回a数组对应位置上大于b数组的元素值
print(a[a>b])
1.7合并与分割
合并
import numpy as np
A=np.array([1,1,1])
B=np.array([2,2,2])
#上下合并
C=np.vstack((A,B))
#左右合并
D=np.hstack((A,B))
print(D)
print(A.shape,C.shape)
print(A.T.shape)
分割
import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
#print(np.split(A,3,axis=0))
#print(np.array_split(A,3,axis=1))
print(np.vsplit(A,3))
print(np.hsplit(A,2))