numpy中的数组操作
import numpy as np
##创建一个n维数组
a=np.array([1,2,3])#一维
b=np.array([[1,2],[3,4]])#二维
c=np.array([1,2,3,4,5,6],ndmin=2)#设置最小维度
d=np.array([1,2,3,4],dtype=complex)#设置数组元素类型
#print(f'{a}\n{b}\n{c}\n{d}')
##创建结构体类型数组
type=np.dtype([('name','S20'),('age','i1')])
e=np.array([('tom',12),('Jerry',13)],dtype=type)
#print(e)
##调整数组的维数
f=np.array([1,2,3,4,5,6])
g=f.reshape(1,2,3);#调整维数
#print(np.ndim(g))#输出g的维数
#print(g.shape)
#ps:reshape返回的是非拷贝副本,修改f,g也会随之变化
##创建数组
#创建未初始化的空数组
#i=np.empty(shape=[3,2],dtype='S10',order='C')
#shape:数组形状 dtype:元素类型
# order:内存存储元素顺序,‘C’行优先 ‘F’列优先
# np.zeros()#创建数组如上,初始化元素为0
# np.ones()#创建数组如上,初始化元素为1
#从已有对象a创建数组
#np.asarray(a,dtype,order)
#从迭代器对象创建数组
#numpy.fromiter(iterable, dtype, count=-1)#count为读取的数据量,-1默认所有
##从数值范围创建数组
#np.arange(start,stop,step,dtype);
#创建一个等差数列的一维数组
#np.linspace(start,stop,num,endpoint,retstep,dtype)
#endpoint:是否包含结束点,默认为True,retstep:是否显示间距
#创建一个等比数列的一位数组
#np.logspace(start,stop,num,endpoint,base,dtype)
#base:对数log的底数
#切片
# k = np.array([[1,2,3],[3,4,5],[4,5,6]])
# print (k[...,1]) # 第2列元素
# print (k[1,...]) # 第2行元素
# print (k[...,1:]) # 第2列及剩下的所有元素
#布尔索引
# l=np.array([1,2,3,4,5,6])
# print(l[l>2])
#过滤非负数
# a = np.array([1, 2+6j, 5, 3.5+5j])
# print (a[np.iscomplex(a)])
##迭代数组
#使用np.nditer灵活访问多维数组的元素
# m=np.arange(6).reshape(2,3)
# print()
#方法一:
# for i in np.nditer(m,order='F'):#F列序优先,C行序优先
# print(i,end=' ')
#方法二:
# for i in m.flat:
# print(i)
##复制拷贝数组,修改新数组,原数组不受影响
# n=np.arange(6).reshape(2,3)
# o=n.flatten()
# o[0]=1
# print(o)
# print(n)
##展平多维数组的元素(通常按行展开)
# p=np.arange(6).reshape(2,3)
# print(np.ravel(p, order='C'))
##对换数组的维度(转置,行列互换)
# q=np.arange(6).reshape(2,3)
# print(q)
# print(np.transpose(q))
##插入新轴扩展数组形状
# r=np.arange(6).reshape(2,3)
# s=np.expand_dims(r,axis=0)
# print(s)
##沿指定轴连接相同形状的两个或多个数组
# t=np.arange(6).reshape(2,3)
# u=np.array([[1,2,3],[4,5,6]])
# print(f'{t}\n{u}')
# print()
# print(np.concatenate((t,u)))
#功能相同;numpy.stack用于连接数组序列
# numpy.hstack:用于水平堆叠
#numpy.vstack:用于垂直堆叠
#将一位数组分割为多个子数组
# v=np.arange(9)
# #w=np.split(v,4)#平均分为4份,除不开会报错
# w=np.split(v,[2,5,7])#指定每一份的开始位置
# print(w)
#ps: np.hsplit:用于水平分割数组
#np.vsplit:用于垂直分割数组
##函数返回指定大小的新数组
# a=np.arange(6).reshape(2,3)
# print(a)
# b=np.resize(a,[3,2])
# print(b)
# c=np.resize(b,[4,3])
# print(c)#尺寸变了后,用前面的补齐
##往数组末尾添加值,若不指定轴则总是返回一维数组。
# a=np.arange(6).reshape(2,3)
# print(a)
# print(np.append(a,[3,6,9]))
# print(np.append(a,[[9,6,3]],axis=0))
# print(np.append(a,[[1],[2]],axis=1))
##在给定索引之前插入 规则跟以上差不多,未提供轴参数,数组会展开
# a=np.arange(6).reshape(2,3)
# print(a)
# print(np.insert(a,3,[111,222]))
# print(np.insert(a,1,[6,7],axis=1))
#删除指定元素或子数组,规则跟以上差不多,未提供轴参数,数组会展开
# a=np.arange(6).reshape(2,3)
# print(a)
# print(np.delete(a,2))
# print(np.delete(a,1,axis=0))#删除第二行
#元素去重
#numpy.unique(arr, return_index, return_inverse, return_counts)
# arr:输入数组,如果不是一维数组则会展开
# return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储
# return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储
# return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数
# a=np.arange(6).reshape(2,3)
# b=np.arange(1,7).reshape(2,3)
# c=np.concatenate((a,b))
# print(c)
# print()
# print(np.unique(c,return_counts=True))#各个元素出现的次数
##类型修改
#ndarry.astype(np.int32)
###Numpy字符串函数
# numpy.char.add()
# numpy.char.multiply()
# numpy.char.center()
# numpy.char.capitalize()
# numpy.char.title()
# numpy.char.lower()
# numpy.char.upper()
# numpy.char.split()
# numpy.char.splitlines()
# print(np.char.strip(' yes '))
# numpy.char.join()
# numpy.char.replace()
# numpy.char.encode()
# numpy.char.decode()
#返回倒数
# print(np.reciprocal(0.33))
#指定轴元素的最大最小值
# np.amin(a,axis)
# np.amax(a,axis)
#返回最大最小元素的差(不指定轴时,默认为全部元素)
# np.ptp();
#若第二个参数是50就相当于求平均值。(不指定轴时,默认为全部元素)
# print(np.percentile([[1,2,3],[4,5,6],[7,8,9]],50,axis=1))
#中位数(不指定轴时,默认为全部元素)
# print(np.median([1,2,3]))
#算术平均值(不指定轴时,默认为全部元素)
# print(np.mean([1,2,3,4,5]))
#加权平均值,每个数乘以权重的和 再除以总权重
# print(np.average([1,2,3,4],weights=[4,3,2,1],returned=True))
#标准差:数组中每个元素与数组平均值的差的平方相加,再除以数组元素个数的开方
# np.std()
# #方差数组中每个元素与数组平均值的差的平方相加
# np.var()
##创建视图 试图修改不会影响原数组
# a=np.arange(6).reshape(3,2)
# b=a.view()
# b.shape=2,3
import numpy.matlib
# print (np.matlib.empty((2,2)))
# print (np.matlib.zeros((2,2)))
# print(np.matlib.ones((2,2)))
# #numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
# print(np.matlib.eye(2,2,0))
#创建给定大小的单位矩阵
# a=np.matlib.identity(5)
# print(a)
#创建一个矩阵,数据是随机的
# a=np.matlib.rand(3,3)
# print(a)
#一维数组的内积,二维数组矩阵相乘
# a=np.arange(6).reshape(2,3)
# b=np.arange(1,7).reshape(3,2)
# print(np.dot(a,b))
# #两个向量的内积:展开后对应位置相乘的和
# print(np.vdot(a,b))
#返回一位数组向量内积。对于更高维度。返回最后一个轴上乘积的和
# a=np.arange(4).reshape(2,2)
# b=np.arange(1,5).reshape(2,2)
# print(a)
# print(b)
# print()
# print(np.inner(a,b))
# #print(np.inner(a,b))
# #矩阵相乘
# a = [[1,0],[0,1]]
# b = [1,2]
# print(numpy.matmul(a,b))
#计算行列式
# print(np.linalg.det([[1,2,3],[2,4,6],[7,8,9]]))
#求解线性方程组
# np.linalg.solve(a,b)
#求一个矩阵的逆矩阵
# x=np.array([[1,0],[0,1]])
# y=np.linalg.inv(x)
# print(y)
# print()
# print(np.matmul(x,y))
# print(np.dot(x,y))