自学记录,不专业
看就完了,奥里给
import numpy as np
lst=[i for i in range(6)]
#---------------------------------------------------
input('\n\n1.创建两个数组,类型为numpy.ndarray\n')
array1=np.array(lst)
array2=np.array([[[1,2,3],[4,5,6]],[[0,0,1],[1,1,2]]],dtype=np.int8)#dtype参数规定数组中数据的数据类型
print(type(array1),type(array2))
#----------------------------------------------------
input('\n\n2.查看数组的维度和形状\n')
print('维度:',array1.ndim,array2.ndim)
print('形状:',array1.shape,array2.shape)
#-----------------------------------------------------
input('\n\n3.改变数组形状\n')
array1_re=array1.reshape(2,3)
print('改变后:',array1_re)
print('改变前:',array1)
#-----------------------------------------------------
input('\n\n4.查看数组数据类型\n')
print(array1.dtype,array2.dtype)
#-----------------------------------------------------
input('\n\n5.查看数组的大小(貌似就是元素个数)\n')
print(array1.size,array2.size)
提取第几行第几列
import numpy as np
array=np.array([i for i in range(18)]).reshape(3,6)#reshape的作用是把np.array中创建的一维数组变形
print('原数组array:\n',array)
#----------------------------------------------
input('\n\n1.取原数组的0-1行,1-3列\n')
array1=array[0:2,1:4]
print(array1)
#----------------------------------------------
input('\n\n2.取原素组1-末行的首-4列\n')
array2=array[1:,:4]
print(array2)
#----------------------------------------------
input('\n\n3.取原数组首-末行的2-末列\n')
array3=array[:,2:]
print(array3)
加减乘 转置
import numpy as np
array1=np.array([i for i in range(18)]).reshape(3,6)
array2=np.array([i*3 for i in range(18)]).reshape(3,6)
print('原数组:\n',array1,'\n\n',array2,sep='')
#-----------------------------------------------
input('\n\n两数组相加\n')
print(array1+array2)
#-----------------------------------------------
input('\n\n两数组相减\n')
print(array1-array2)
#-----------------------------------------------
input('\n\n两数组相乘,注意不是矩阵乘法,只是把对应位置的数相乘\n')
print(array1*array2)
#-----------------------------------------------
input('\n\narray1+2\n')
print(array1+2)
#-----------------------------------------------
input('\n\narray1转置\n')
print(array1.T)
矩阵乘法
numpy.matmul(a,b)
numpy.dot(a,b)
元素为float16类型的数组和元素为float64类型的数组记录同样的值,扩大10000倍后不一样
通过 set_printoptions(precision=?) 来设置精度
import numpy as np
array_float16=np.array([[2.2,4.4],[6.6,8.8]],dtype=np.float16)
array_float64=np.array([[2.2,4.4],[6.6,8.8]],dtype=np.float64)
#------------------------------------------------------------------------
input('\n\n1.精度不同,值会存在误差\n')
print('原数组:\n',array_float16,'\n\n',array_float64,sep='')
input('\n如果把里面的元素都扩大10000倍\n\n')
print('扩大后:\n',array_float16*10000,'\n\n',array_float64*10000,sep='')
#------------------------------------------------------------------------
input('\n\n2.通过 set_printoptions(precision=?) 来设置精度\n\n')
np.set_printoptions(precision=6)
print(array_float64/3)
int:默认int32
float:默认float64
import numpy as np
array1=np.array([1,2])
array2=np.array([1.0,2.0])
print(array1.dtype,array2.dtype)
zeros 创建指定形状和类型的全 0 数组
zeros_like 创建另一个数组的形状和类型创建全 0 数组
ones 创建指定形状和类型的全 1 数组
ones_like 创建另一个数组的形状和类型创建全 1 数组
empty 创建指定形状和类型的空数组,不对数据进行初始化
empt_like 根据另一个数组的形状和类型创建空数组,不对数据尽兴初始化
full 创建指定形状和类型的数组,全部填上指定的值
full_like 根据另一个数组的形状和类型创建空数组,全部填上指定的值
import numpy as np
array=np.arange(48).reshape(4,4,3)
spt=np.dsplit(array,3)
input('\n\nnp.zeors,参数给数组形状')
zero1=np.zeros((4,4,1),dtype=np.int8)
print(zero1)
input('\n\nnp.zeros_like参数给一个数组,创建一个相同形状的数组')
zero2=np.zeros_like(spt[0],dtype=np.int8)
print(zero2)
import numpy as np
array=np.arange(48).reshape(4,4,3)
spt=np.dsplit(array,3)
input('\n\nnp.ones,参数给数组形状')
one1=np.ones((4,4,1),dtype=np.int8)
print(one1)
input('\n\nnp.ones_like参数给一个数组,创建一个相同形状的数组')
one2=np.ones_like(spt[0],dtype=np.int8)
print(one2)
import numpy as np
array=np.arange(48).reshape(4,4,3)
spt=np.dsplit(array,3)
input('这两种方法不对数据进行初始化')
input('\n\nnp.empty,参数给数组形状')
empty1=np.empty((4,4,1),dtype=np.int8)
print(empty1)
input('\n\nnp.empty_like参数给一个数组,创建一个相同形状的数组')
empty2=np.empty_like(spt[0],dtype=np.int8)
print(empty2)
import numpy as np
array=np.arange(48).reshape(4,4,3)
spt=np.dsplit(array,3)
input('以下两种方法建立某种形状且值全为给定值的数组')
input('\n\nnp.full,参数给数组形状')
ful=np.full((4,4,1),25,dtype=np.int8)
print(ful)
input('\n\nnp.full_like参数给一个数组,创建一个相同形状的数组')
fulll=np.full_like(spt[0],12,dtype=np.int8)
print(fulll)
arange(开始,结束,步长) 创建等差递变数组
import numpy as np
input('numpy.arange(),下面的三个参数分别为开始,结束,步长')
arr=np.arange(-15,23,0.25)
print(arr)
linspace(开始,结束,元素个数)
import numpy as np
print(np.linspace(-20,72,104))
import numpy as np
array=np.array([i for i in range(125)]).reshape(5,5,5)
print('原数组:\n',array,sep='')
#-----------------------------------------------------
input('\n\n获取第2块,第3行,第4列的元素,以下两种方法等效:\n')
print(array[2][3][4])
print(array[2,3,4])
#-----------------------------------------------------
input('\n\n指定步长的索引:获取第0、3块,第0、2、4行,第3列(基于python列表基础)\n')
print(array[::3,::2,3])
#-----------------------------------------------------
input('\n\n中括号表示在该维度上取特定的元素:eg1:获取第0、3、4块,后4行,所有列\n')
print('eg1:\n',array[[0,3,4],1:],sep='')
input('\n\n然而当我们箱获得第0,1,2,4块,第0,2,3,4行,只得到了一块四行的数据\n')
print('eg2:\n',array[[0,1,2,4],[0,2,3,4]],sep='')
import numpy as np
array=np.array([i for i in range(125)]).reshape(5,5,5)
#-----------------------------------------------------
input('\n\n解决上面(020)的问题,随心所欲取块行列\n')
#用np.ix_()包裹[0,1,2,4],[0,2,3,4]
print(array[np.ix_([0,1,2,4],[0,2,3,4])])
#-----------------------------------------------------
input('\n\n顺便看一下np.ix_([0,1,2,4],[0,2,3,4])是什么\n')
print(np.ix_([0,1,2,4],[0,2,3,4]))
#-----------------------------------------------------
input('\n\n把[0,1,2,4],[0,2,3,4]中的[0,1,2,4]换成[[0,1,2,4]]再转置效果也能达到这个效果\n')
tmp=np.array([[0,1,2,4]]).T
print(array[tmp,[0,2,3,4]])
import numpy as np
lst1=[0,1,2,3,4]
lst2=[4,5,6,7,8]
lst3=[9,8,7,5,6]
array1=np.array([lst1,lst2,lst3])
print(array1)
input( 'next ')
arr1=np.array(lst1)
arr2=np.array(lst2)
arr3=np.array(lst3)
array2=np.array([arr1,arr2,arr3])
print(array2)
import numpy as np
array=np.arange(100)#相当于np.array([i for i in range(100)])
#-------------------------------------
input('\n\nbool索引\n')
array_bool=array%3==0
print(array_bool)
#-------------------------------------
input('\n\n保留3的倍数\n')
array_mod3=array[array_bool]
print(array_mod3)
import numpy as np
#--------------------------------------------------
input('\n\n读取txt文件\n')
array1=np.genfromtxt('abc.txt',dtype=np.str)
print(array1)
#delimiter 分隔符
array2=np.genfromtxt('abc.txt',dtype=np.int16,delimiter=' &QAQ& ')
print(array2)
#--------------------------------------------------
input('\n\n读取txt文件,用numpy.loadtxt貌似和numpy.genfromtxt差不多\n')
print('但貌似genfromtxt功能强一些,下方改为dtype=np.int16会报错,而genfromtxt不会')
array3=np.loadtxt('abc.txt',dtype=np.str,delimiter=' &QAQ& ')
print(array3)
#--------------------------------------------------
input('\n\n保存数组为txt\n')
array1[0,0]=0
np.savetxt('abc_2.txt',array1,fmt='%s',delimiter=' &QAQ& ')
#参数依次为 保存为txt文件的名字 要保存的数组的名字 元素储存格式 分隔符
print('保存完成')
import numpy as np
array1=np.arange(48).reshape(6,8)
array2=array1.reshape(8,6)
print('二进制读写')
#--------------------------------------------------
input('\n\n储存一个数组,array1\n')
np.save('abc-b.sadfsd',array1)
print('储存完成')
print('你会发现储存后文件的后缀名永远是npy(如果不是,会自动补上)')
#--------------------------------------------------
input('\n\n读取一个数组,格式npy\n')
array9=np.load('abc-b.sadfsd.npy')
print(array9)
import numpy as np
array1=np.arange(48).reshape(6,8)
array2=array1.reshape(8,6)
#--------------------------------------------------
input('\n\n储存多个数组,用numpy.savez()\n')
np.savez('abc-b.sadfsd',giao=array1,cxkjntm=array2)
#giao 和 cxknjntm是数组的key值(类似字典),下面会说
print('储存完成')
print('你会发现储存后文件的后缀名永远是npz(如果不是,会自动补上)')
#---------------------------------------------------
input('\n\n读取一个或多个数组(读取一个npz文件)\n')
array_home=np.load('abc-b.sadfsd.npz')
print(array_home)
print('发现这样读出了一个地址')
#---------------------------------------------------
input('\n\n分别输出之前存入的array1 array2\n')
print(array_home['giao'])
print(array_home['cxkjntm'])
import numpy as np
array1=np.arange(16).reshape(4,4)
array2=np.array([111,222,333,444])
print('注意array2是个一个四行一列向量,是个列向量:array2.shape:',array2.shape)
input()
input('列合并,注意np.c_[]中的括号是方括号')
combie1=np.c_[array1,array2]
combie2=np.c_[array2,array1]
print(combie1,"\n\n",combie2)
注意参数是元组形式
import numpy as np
arr1=np.arange(4)
arr2=np.arange(4,8)
arr3=np.arange(8,12)
input('列叠加若干个一维列向量\n\n')
combie1=np.column_stack((arr1,arr2,arr3))
print(combie1)
input('按列合并数组')
mid1=np.column_stack((arr1,arr2))
combie2=np.column_stack((mid1,arr3))
combie3=np.column_stack((combie2,combie2))
print(combie3)
import numpy as np
array1=np.arange(16).reshape(4,4)
array2=np.array([111,222,333,444])
print('注意array2是个一个四行一列向量,是个列向量:array2.shape:',array2.shape)
print('如果使用行合并np.r_[]需要先把array2转化称行向量')
input()
input('行合并,注意np.r_[]中的括号是方括号')
combie1=np.r_[array1,array2.reshape(1,4)]
combie2=np.r_[array2.reshape(1,4),array1]
print(combie1,"\n\n",combie2)
注意参数是元组形式
import numpy as np
arr1=np.arange(4)
arr2=np.arange(4,8)
arr3=np.arange(8,12)
input('行叠加若干个一维列向量\n\n')
combie1=np.row_stack((arr1,arr2,arr3))
print(combie1)
print("注意这里不用先把列向量转化为行向量,因为一维列向量会在函数内转化称二维行")
input('按行合并数组')
mid1=np.row_stack((arr1,arr2))
combie2=np.row_stack((mid1,arr3))
combie3=np.row_stack((combie2,combie2))
print(combie3)
import numpy as np
#新建0-63的4x4x4三维数组
array1=np.arange(64).reshape(4,4,4)
print(array1)
input("用 split方法拆分数组,参数见注释\n")
#用split(ary, indices_or_sections, axis=0)拆分
#axis表示分割轴的方向
#(解释沿某方向:假设二维数组沿水平方向切割,可以想象有一条水平方向的轴线,沿着找条水平轴线的方向把轴线竖切称若干份,得到若干份数组)
#关于axis: 自己实验发现axis=0表示以最高维度方向为分割方向,如三维数组沿深度方向分割,二位数组沿垂直方向分割
#axis=1 ,沿第二高的维度方向分割 以此类推
#当indices_or_sections为整数x,则把数组平分成x份,若不能平分则报错
#当indices_or_sections为列表,则按照列表中的元素为轴拆分数组
arr1=np.split(array1,4,2)
print(arr1,'\n\n')
arr2=np.split(array1,[1,3],2)
print(arr2)
import numpy as np
#新建0-63的4x4x4三维数组
array1=np.arange(64).reshape(4,4,4)
print(array1)
print('分别使用hsplit,vsplit,dsplit分割\n(horizontally,vertically,depth)\n')
print('注意:hsplit相当于axis=1,vsplit相当于axis=0,dsplit相当于axis=2')
print('\n\n\n分别使用h,v,d方法拆分三维数组:')
input('hsplit(ary, indices_or_sections),两参数同split一样\n')
print(np.hsplit(array1,[1,2,3]))
input('vsplit(ary, indices_or_sections),两参数同split一样\n')
print(np.vsplit(array1,4))
input('dsplit(ary, indices_or_sections),两参数同split一样\n')
print(np.dsplit(array1,4))
#貌似拆分数组维度不变
import numpy as np
类比 split hsplit vsplit dsplit
有 concatenate hstack vstack dstack
np.vstack((a,b))
效果大概同
np.concatenate((a,b),axis=0)#注意(a,b)是元组形式的
v:axis=0
h:axis=1
d:axis=2