python中numpy使用

来源:互联网 发布:速拓软件价格 编辑:程序博客网 时间:2024/05/23 13:57
import numpy as np#导入numpy
data=[[1,2,3],[4,5,6]]#创建元组
arr=np.array(data)#转化为数组
arr.ndim#数组空间维数
arr.shape#数据行列数
arr.dtype#数据类型""int32""
np.zeros(10)#指定长度
np.zeros((3,6))#创建3行6列的0数组
np.ones(5)#array([ 1.,  1.,  1.,  1.,  1.])
np.ones((3,4))#3行4列的全1矩阵
ar1=np.arange(10)#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.eye(3)#3维单位矩阵
np.identity(3)#3维单位矩阵
np.ones_like(arr)#创建与arr相同行、列的全1矩阵
np.zeros_like(arr)#创建与arr相同行、列的全0矩阵
arr_f=arr.astype(np.float64)#将arr中的数据类型转换为float64格式
Nstring=np.array(['1.2','3','4'],dtype=np.string_)#创建数组师可以自行定义字符串
N_float=Nstring.astype(np.float)#将string数据转换为float格式,等价于float64
######数组的标量运算
arr*arr#每个元素平方
arr*5#每个元素乘以5
'''索引和切片'''
ar1_s=ar1[5:8]
ar1[5:8]=12 ##ar1变化后,ar1_s的值也随之变化
ar1_s[:]=100#ar1_s变化后,ar1也随之变化
ar1_s1=ar1[5:8].copy()#完全拷贝,值变化不影响ar1
aro=np.array([[1,2,3],[4,5,6],[7,8,9]])#3维数组
aro[2]#第三组(行)数组
aro[0][2]#数组第0行第二列“3”或aro[0,2]
arr3d=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])#3维数组
'''布尔型索引'''
names=np.array(['bob','joe','will','bob','will','joe','joe'])
data=np.random.randn(7,4)
names=='bob'
data[names='bob']#选取True的行,布尔型数组的长度必须跟被索引的轴长度一致。
data[names=='bob',2:]#选取从第二列开始的数据
data[names=='bob',3]#选取第三列的数据
data[names=='bob'][1,:]#选取第一行(从0行开始算)
names!='bob'#名字不是‘bob’的逻辑数据
-(names=='bob')#意思与names!='bob一致
mask=(names=='bob')|(names=='will')#逻辑或,&( 和),python中不能用and和or
data[data<0]=0#将data中所有小于0的数据设置为0
data[names!='joe']=7#将不是joe的行赋值为7
'''花式索引'''
arr0=np.empty((8,4))#创建新数组,只分配内存空间,不填充任何值
for i in range(8):
    arr0[i]=i#数组的i值就是指i行
arr0[[2,3]]#选取数字的子集,第2行,第3行
arr0[[-7,-5]]#全负数将会从末尾开始选取子集
arr0[[-1,2]]#有正数,负数选取子集
arr1=np.arange(32).reshape((8,4))#按行重新设置数据维数,8行4列
arr1[[1,5,4,2],[0,3,1,2]]#等价与选取元素行列如下的元素(1,0),(5,3),(4,1),(4,2)
arr1[[1,5,4,2]][:,[0,3,1,2]]#选取数组1,5,4,2行0,3,1,2列的子集
arr1[np.ix_([1,5,4,2],[0,3,1,2])]#选取数组1,5,4,2行0,3,1,2列的子集
arr1T=np.dot(arr1.T,arr1)#计算矩阵内积#(arr1)^t(arr1)
'''通用函数  ufunc'''
arr2=np.arange(10)
np.sqrt(arr2)#各元素开方
np.exp(arr2)#各元素求指数
x=np.random.randn(8)#
y=np.random.randn(8)
np.maximum(x,y)#x,y两数组元素两两对比,返回较大的值
points=np.arange(-5,5,1)#产生-5至5之间,间隔1的10个数
xs,ys=np.meshgrid(points,points)#xs按行重复points元素10次,ys按列重复points元素10次


import matplotlib.pyplot as plt
z=np.sqrt(xs**2+ys**2)#每个元素开方
plt.imshow(z,cmap=plt.cm.gray)#创建图形函数
plt.colorbar()
plt.title('Imange plot of $\sqrt{x^2+y^2}$ for a grid of values')
plt.show()#显示图形
'''将numpy.where 三元表达式x if condition else y的矢量化版本。'''
xarr=np.array([1,2,3,4,5])
yarr=np.array([6,7,8,9,10])
cond=np.array([True,False,True,True,False])
result=np.where(cond,xarr,yarr)#1,7,3,4,10。np.where的意思为[xarr if cond else yarr]
arrc=np.random.randn(4,4)#产生4行4列随机数,注意和zeros,ones区分
np.where(arrc>0,2,-2)#arr元素中大于0的赋值为2,小于0的赋值为-2
arr=np.arange(16).reshape((2,8))#产生5行4列随机数
arr.mean()#数据均值
np.mean(arr)#数据均值
arr.sum()#数组和
np.sum(arr)#数组和
arr.sum(axis=0)#按列求和
arr.sum(axis=1)#按行求和
np.sum(arr,axis=1)#按行求和
arr=np.array([[0,1,2],[3,4,5],[6,7,8]])
arr=np.random.randn(8)
arr.sort()#数据排序,对arr变化,此时arr为排序好的数据
arr=np.random.randn(5,3)
arr.sort(1)#多维数组可以对轴进行排序,0按行排序,1按列排序,修改后arr发生变化
np.sort(arr,0)#arr按行排序,arr本身不发生变化
large_arr=np.random.randn(1000)#产生1000个随机数
large_arr.sort()
large_arr[(int(0.05*len(large_arr)))]#5%分位数
names=np.array(['bob','joe','will','bob','will','joe','joe'])
np.unique(names)#唯一字符
sorted(set(names))#唯一字符
values=np.array([6,0,0,3,2,5,6])
np.in1d(values,[2,3,6])#value中的每一个值是否在[2,3,6]中,如果是,该值返回true,否则返回false.返回bool值
np.in1d([2,3,6],values)#[2,3,6]中的值是否在#value中,返回bool值(T,T,T)
x=np.array([1,2,7,6,3])
y=np.array([2,4,8,3,9,7,7])


np.intersect1d(x,y)#返回x和y中的公共元素,并返回有序结构
np.union1d(x,y)#计算x,y的并集(无重复),并返回有序据结果过
np.in1d(x,y)#x的每一个元素是否包含再y中,bool
np.setdiff1d(x,y)#集合的差,即在x中且不在y中
np.setxor1d(x,y)#集合对称差,“异或”,即存在与一个数组中,但不同时在两个数组中,并-交
'''numpy可以去写磁盘上的二进制数据或文本数据,pandas能将表格型读取到内存'''
'''np.save,np.load用于读写磁盘数据。'''
arr=np.arange(10)
np.save('some_arr',arr)#保存文件
np.load("some_arr.npy")#读取磁盘保存数据
arr2=np.arange(-5,5,0.1)
np.savez('arr_ar.npz',a=arr,b=arr2)#多个数组已压缩文件的形式保存,以关键字形式存入
ach=np.load("arr_ar.npz")#加载压缩文件式数组,得到类似字典的对象,
ach['a']#调取字典名字查看数据
arr=np.loadtxt("code_public.txt",delimiter=',')#读取文本数据
arrc=np.loadtxt("d:\code\code_public.txt",delimiter=',')#读取d盘数据
x=np.array([[1,2,3],[4,5,6]])
y=np.array([[6,23],[-1,7],[8,9]]) #
x.dot(y)##矩阵x与y相乘
samples=np.random.normal(size=(4,4))#产生4维正态分布矩阵
from numpy.linalg import *#计算与举证相关,行列式,矩阵的逆等
np.linalg.det(samples)#矩阵行列式
np.linalg.inv(samples)#矩阵求逆
np.diag(samples)#返回矩阵对角线元素
np.linalg.eig(samples)#返回矩阵特征值和特征向量
import timeit #导入计算时间的模块


timeit np.random.normal(size=2)#必须写明size,产生正态分布的2个随机数















0 0