0.简介
“NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。”——百度百科
1.初识Numpy
“引包”
import numpy
1.1生成指定元素
的数组(矩阵)matrix
(1)直接给出元素
vector=numpy.array([1,2,3,4,5])
print(type(vector))
(2)借助list
list_1=[[1,2,3],[3,4,5],[5,6,7]]
print(list_1)
matrix=numpy.array(list_1)
print(vector)
print(matrix)
1.2转换数组的形状
(1)reshape
array_reshape_m=numpy.arange(9).reshape(3,3)
print(array_reshape_m)
(2) 将矩阵变成一维的
array_ravel_m=array_reshape_m.ravel()
print(array_ravel_m)
(3)利用属性进行调整
array_ravel_m.shape=(3,3)
print(array_ravel_m)
1.3生成指定规模
的数组(矩阵)matrix
(1)生成包含连续的元素的数组
array_test_1=numpy.arange(9)
print(array_test_1)
array_test_m=numpy.arange(10,30,5)# 10-30(要头不要尾),每隔5个生成一个
print(array_test_m)
array_test_m=numpy.arange(0,3,0.5)# 10-30(要头不要尾),每隔5个生成一个
print(array_test_m)
(2)生成指定规模的零数组——默认类型是float类型
array_zero_m=numpy.zeros((2,4))
print(array_zero_m)
(3)生成指定规模的1数组(同时可以指定数组元素的类型)——默认类型是float类型
array_one_m=numpy.ones((2,4),dtype=numpy.int32)
print(array_one_m)
(4)生成指定规模的随机元素(0-1)数组——默认类型是float类型
array_random_m=numpy.random.random((2,4))
print(array_random_m)
(5)在某个区间内平均生成指定个数的数组
array_linspace_m=numpy.linspace(0,10,21)# 最小值,最大值,数组元素个数(头尾都要)
print(array_linspace_m)
2.Numpy属性及取元素方法
2.1属性
print(vector.shape)#数组当前是 几行几列的
print(vector.data())
print(vector.dtype)# 数组当前存储数据的类型
print(vector.ndim)# 当前数组是几维数组(现在是一维数组)
print(vector.size)# 当前数组有多少个元素
2.2 截取数组中部分元素
print(matrix)
print(matrix[:,2])
print(matrix[0,0])
print(matrix[:,0])
print(matrix[0:2,0:2])
print(matrix[0:2,:])
3.Numpy一维数组(矩阵)的常用方法
print(vector.max())
print(vector.mean())
print(vector.min())
print(vector.argmax()) # 最大值的索引
print(vector.argmin())# 最小值的索引
4.操作数组中等于某个值的全体数据
print(matrix==3)
print(matrix[matrix==3])
matrix[matrix==3]=100
print(matrix)
matrix[(matrix==100)|(matrix==5)]=99
print(matrix)
5.整体的类型转换
print(matrix.dtype)
matrix_str=matrix.astype(str)
print(matrix_str.dtype)
matrix_float=matrix.astype(float)
print(matrix_float.dtype)
6.Numpy多维数组(矩阵)的常用方法
对于多维数组,可以整体调用函数或者指定对行或者列操作
print(matrix)
print(matrix.sum())# 求全体的和
print(matrix.sum(axis=0))# 求每列的和
print(matrix.sum(axis=1))# 求每行的和
print(matrix.max())# 求整体的最大值
print(matrix.max(axis=0))# 求每列的最大值
print(matrix.max(axis=1))# 求每行的最大值
print(matrix.argmax())# 求整体的最大值
print(matrix.argmax(axis=0))# 求每列的最大值索引
print(matrix.argmax(axis=1))# 求每行的最大值索引
7.Numpy单个数组(矩阵)的常见操作
准备工作:
a=numpy.array([25,36,49,64])
b=numpy.arange(4)
print(a)
print(b)
7.1四则运算
c=a-b
print(c)
c=a-1
print(c)
c=b**2
print(c)
c=a<30
print(c)
c=numpy.sqrt(a)
print(c)
7.2转置
a=numpy.arange(15)
a.shape=(3,5)
print('a')
print(a)
print('a的转置')
print(a.T)
7.3 矩阵的复制
a=numpy.array([[25,36],[49,64]])
c=a# 并没有复制,只是让二者共同指向同一个地址空间,改变,互相受影响
print(c is a)
(1)浅复制
元素会共用
c=a.view()
print(c is a)
c[0,0]=-1
print(a)
(2)深度复制
完完全全的复制出来一个a,并存放到另一个空间,并让c指向它,二者之后的操作没有关系
c=a.copy()
print(c is a)
c[1,1]=-1
print(a)
7.4 以某个矩阵为元素,进行整体扩充
c=numpy.tile(a,(2,2))
print(c)
7.5排序
a=numpy.array([[25,3],[4,64]])
print(a)
c=numpy.sort(a)# 默认会按照行排序
print(c)
c=numpy.sort(a,axis=0)# 按照列排序
print(c)
c=numpy.sort(a,axis=1)#按照行排序
print(c)
c=numpy.argsort(a,axis=1)#大小位置顺序
print(c)
8.Numpy数组(矩阵)之间的常见操作
准备工作:
A=numpy.array([[0,1],[1,0]])
B=numpy.array([[1,2],[3,4]])
print('A')
print(A)
print('B')
print(B)
8.1两个矩阵对应元素直接相乘(内积)
C=A*B
print('A*B')
print(C)
8.2矩阵相乘(行乘以列,再求和)
C=A.dot(B)
print('A·B')
print(C)
C=numpy.dot(A,B)
print('A·B')
print(C)
8.3拼接
(1)垂直拼接(列一样多)
C=numpy.vstack((A,B))
print('AB')
print(C)
(2) 水平拼接(行一样多)
C=numpy.hstack((A,B))
print('AB')
print(C)
8.4分割
(1)垂直分割
A=numpy.floor(10*numpy.random.random((12,2)))
print(A)
C=numpy.vsplit(A,3)
print('A垂直平均分割三份')
print(C)
C=numpy.vsplit(A,(3,4))
print('A垂直平均分割三份')
print(C)
(2)水平分割
A=numpy.floor(10*numpy.random.random((2,12)))
print(A)
C=numpy.hsplit(A,3)# 3指的是平均分割的份额
print('A水平平均分割三份')
print(C)
C=numpy.hsplit(A,(3,4))# 指定切割的位置
print('分别在3,4处分割')
print(C)