1、NumPy简介:
NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical
和Python
。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。
2、NumPy常见操作
NumPy中存在两种不同的数据结构Matrix 和 Array都可用于处理行列型数据,但是本质类型是有区别的
2.1、创建矩阵
#将numpy中所有的模块引入当前命名空间
from numpy import *
n_arry = random.rand(4,4) #生成4*4随机数组
print(n_arry)
print(type(n_arry))
#调用mat()可以实现降数组转化为矩阵
n_mat = mat(n_arry)
print(n_mat)
print(type(n_mat))
#.I为矩阵的求逆操作
invRandMat = n_mat.I
print(invRandMat)
#eye()创建单位矩阵
d_mat = eye(4,4)
print(eye(4,4),invRandMat*n_mat,sep='\n')
2.1.2、数组
#数组操作
import numpy as np
n_array = np.array([[1,2,3], #np.array()返回数组 一般使用list形式使用
[4,5,6]])
print(n_array)
#[[1 2 3]
# [4 5 6]]
#生成三行四列全为0的矩阵
z_array = np.zeros((3,4))
print(z_array)
print(type(z_array))
#生成三行四列全为1的矩阵
o_array = np.ones((3,4))
print(o_array)
print(type(o_array))
###############3
a = np.array([2,34,4],dtype=np.int64 )
print(a.dtype)
b = np.array([[2,34,4],
[2,32,4]])
print(b)
c = np.zeros((3,4))
print(c)
d = np.ones((3,4))
print(d)
e = np.arange(10,20,2)
print(e)
f = np.arange(12).reshape((3,4))
print(f)
g = np.linspace(1,10,20).reshape((4,5))
print(g)
2.2、常见属性
#ndim 维度信息
print('number of dim:',n_array.ndim) #number of dim: 2
#shape 形状
print('shape:',n_array.shape) #shape: (2, 3)
#size 数据元素个数
print('size:',n_array.size) #size: 6
#array dtype=np.int /np.int32/np.float32/np.float 数据类型
print(n_array.dtype)
2.3、常见运算
#numpy_calc
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(a)
print(b)
print(a+b)
print(a-b)
print(a**2)
# [10 20 30 40]
# [0 1 2 3]
# [10 21 32 43]
# [10 19 28 37]
# [ 100 400 900 1600]
print(10*np.sin(a))
print(10*np.cos(a))
# [-5.44021111 9.12945251 -9.88031624 7.4511316 ]
# [-8.39071529 4.08082062 1.5425145 -6.66938062]
print(b<3)
# [ True True True False]
a = np.array([[1,1]
,[0,1]])
b = np.arange(4).reshape((2,2))
c = a*b #逐个相乘
d = np.dot(a,b) #矩阵乘法
#等价于 d = a.dot(b)
print(c)
print(d)
# [[0 1]
# [0 3]]
# [[2 4]
# [2 3]]
a = np.random.random((2,4))
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))
print(np.sum(a,axis=1)) #行求
print(np.sum(a,axis=0)) #列求
# [[0.50340378 0.77212362 0.01905615 0.09390617]
# [0.63426158 0.67963863 0.38767069 0.5702104 ]]
# 3.6602710217425374
# 0.019056149732405103
# 0.7721236229908786
# [1.38848973 2.2717813 ]
# [1.13766536 1.45176225 0.40672684 0.66411657]
A = np.arange(2,14).reshape(3,4)
print(A)
print(np.average(A)) #平均
print(np.median(A)) #中位
print(np.cumsum(A)) #累加
print(np.diff(A))#累差
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# 7.5
# 7.5
# [ 2 5 9 14 20 27 35 44 54 65 77 90]
# [[1 1 1]
# [1 1 1]
# [1 1 1]]
#非零
print(np.nonzero(A))
#转置
print(np.transpose(A))
print(A.T)
#clip
print(np.clip(A,5,9)) #小于5的表示为5,大于9的表示为9
# [[5 5 5 5]
# [6 7 8 9]
# [9 9 9 9]]
2.4、与torch相关操作
#numpy_torch
import torch
import numpy as np
np_data = np.arange(6).reshape((2,3)) #return 0 ~5 的一维数组。通过reshape改编为二维数组
torch_data = torch.from_numpy(np_data) #实现numpy数据转换为torch
tensor2array = torch_data.numpy()
print(
'\nnumpy',np_data,
'\ntorch',torch_data,
'\ntensor2array',tensor2array
)
#abs
data = [-1,-2,1,2]
tensor = torch.FloatTensor(data) #32 bit
print(
'\nabs',
'\nnumpy',np.abs(data), #[1,2,1,2]
'\ntorch',torch.abs(tensor) #[1,2,1,2]
)
#sin
print(
'\nsin',
'\nnumpy',np.sin(data), #[1,2,1,2]
'\ntorch',torch.sin(tensor) #[1,2,1,2]
)
#matrixmult
data = [[1,2],[3,4]] #矩阵
tensor = torch.FloatTensor(data)
print(
"\nnumpy",np.matmul(data,data),
"\ntorch",torch.mm(tensor,tensor)
)
2.5、分割操作
import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(np.split(A,2,axis=1)) #等量分割
print(np.array_split(A,3,axis=1)) #不等量分割
print(np.vsplit(A,3)) #纵向分为三块
print(np.hsplit(A,2)) #横向分为2块
2.6、合并操作
import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
#水平竖直合并
C = np.vstack((A,B)) #vertical stack
D = np.hstack((A,B)) #horizontal stack
print(C)
print(A.shape,C.shape)
print(D)
print(A.shape,D.shape)
A = A[:,np.newaxis]
print(A)
E = np.concatenate()
2.7、索引
import numpy as np
A = np.arange(3,15) #以为数组
print(A)
print(A[3])
# [ 3 4 5 6 7 8 9 10 11 12 13 14]
# 6
A = A.reshape((3,4)) #重新更新维度
print(A)
# [[ 3 4 5 6]
# [ 7 8 9 10]
# [11 12 13 14]]
print(A[2])
# [11 12 13 14]
#一下两种方法等价
print(A[2][1])
print(A[2,1])
# 12
# 12
#第三行的所有数
print(A[2,:])
#第一列所有数
print(A[:,0])
# [11 12 13 14]
# [ 3 7 11]
#第一行,第二列到第四列数字
print(A[0,1:3])
# [4 5]
#行迭代
for row in A:
print(row)
#列迭代
for col in A.T:
print(col)
# [3 4 5 6]
# [ 7 8 9 10]
# [11 12 13 14]
# [ 3 7 11]
# [ 4 8 12]
# [ 5 9 13]
# [ 6 10 14]
print(A.flatten())
#迭代每一项
for item in A.flat:
print(item)
2.8、复制
import numpy as np
a = np.arange(4)
b = a #关联,类似c语言指针
print(a)
a[0] = 12
print(a)
print(b is a)
c = a.copy() #数值复制
print(c)
a[0] = 13