NLP(10):Numpy

第一节 装饰器, 闭包的应用

#获取每一个函数运行的时间
import time
def runtime(func)
	def get_time():
		print(time.time())
		func()
	return get_time
@runtime
def student_fun():
	print(“学生跑”)
student_run()
#如果函数有参数怎么解决
#有函数的装饰器
#获取每一个函数运行的时间
import time
def runtime(func)
	def get_time(*args,**kwargs):#可以传入多个参数
		print(time.time())
		func(*args,**kwargs)
	return get_time
@runtime
def student_fun(*args,**kwargs):
	print(“学生跑”)
student_run(i=1,j=2)
#关键字参数key=value

需要在调用的函数,和闭包的函数中加入*args,**kwargs

  • *args: 调用多个参数
  • **kwargs: 调用关键字参数

第二节:numpy

1、numpy与pandas的关系

在这里插入图片描述

2、pandas数据类型

  • Series
  • Dataframe

3、numpy其实就是一个多维的数组对象

import numpy as np
data=[1,2,3,4,5]
n=np.array(data*10)
print(n)
每一个np的数组都有一个shape和一个dtype
print(n.shape) #[1,50] 获取数组维度
print(n.dtype) #int64 获取数组的类型

4、numpy 数组的创建

嵌套序列:是由一组等长列表组成的列表

arr=[[1,2,3,4],[1,2,3,4]]
arr2=np.array(arr)
print(arr2.shape)#[2,4]
print(arr2.ndim)#2
arr=[["1","2",3,4],[5,6,7,8]]
print(np.array(arr))#全部转为字符串
print(np.array(arr).dtype)#unicode

当成员中有一个为float时,那么numpy将会推断成为float类型

arr=[[1,2,3,4],[5,6,7,8]]
print(np.array(arr).dtype)#int64
arr=[[1.1,2,3,4],[5,6,7,8]]
print(np.array(arr).dtype)#float64

numpy进行指定长度数据的创建

np.zeros(10)
np.ones((2,3))
np.empy({2,3,4})#生成一个空数组
np.arange(10) #arange 时range函数的数组版本
#类型转换
print(arr.astype(np.int32))
  • int类型 8,16,32,64
  • float类型 16(半精度浮点数),32(标准单精度浮点数),64(标准双精度浮点数),128(扩展精度浮点数)

5、numpy的矢量化计算

数组通常不用在编写循环的情况下,就可以进行批量运算。

arr1=np.array([1,2,3,4])
arr2=np.array([5,6,7,8])
print(arr1+arr2)#把对应位置的元素相加

numpy相加

arr1=np.array([1,2,3,4],[1,2,3,4])
arr2=np.array([5,6,7,8],[5,6,7,8])
#也是对应位置相加

numpy相乘

arr1=np.array([1,2,3,4],[1,2,3,4])
arr2=np.array([5,6,7,8],[5,6,7,8])
arr1*arr2
#也是对应位置相加

和标量进行运算

arr1=np.array([1,2,3,4],[1,2,3,4])
5*arr1 #标量的值会传播

6、numpy的索引和切片

import numpy as np

#numpy的切片
arr=np.arange(10)
print(arr)
print(arr[1])
print(arr[4:])

# 修改
arr[0:4]=11
print(arr)#将一个标量赋值给切片

# copy
arr_copy=arr.copy()
print(arr_copy)

#二维数组的访问
arr1=np.array([[1,2,3],[4,5,6]])
print(arr1[0][1])
print(arr1[0,1])

#关于numpy的比较运算
names=np.array(["tom","jack","robin"])
print(names=="tom")
# [True,False,False]
print(names=="tom"and names=="robin")
#[False,False,False]

# 花式索引 fancy indexing,指的是利用整数数组进行索引
arr=np.empty((8,4))
print(arr)
for i in range(8):
    arr[i]=i
print(arr)
#以一个特定的顺序选取行的子集,传入用于一个指定顺序的整数列表或数组
#这里也可以用负数,[4,3,0,6]顺序列表
print(arr[[4,3,0,6]])
arr=np.arange(32).reshape(8,4)
print(arr.shape)#[8,4]八行四列
print(arr[[1,3,4,6,7],[0,3,1,2]])#先对行筛选,再对行的每个位置索引

print(arr[[1,5,7,2]][:,[0,3,1,2]])
print(arr[np.ix_([1,5,7,2],[0,3,1,2])])

# numpy数组的转置
#transpose/T
arr=np.arange(15).reshape((3,5))
arr1=arr.transpose() #arr1.shape[5,3]
arr2=arr.T
#高维数组
arr=np.arange(24).reshape((2,3,4))
#传入想交换的轴
print(arr.transpose((1,2,0)))#shape:[3,4,2]

7、条件逻辑转数组

np.where一般用于根据一个数组产生一个新的数组,根python中函数式编程的map、reduce类似

#np.where等同于x if condition else y
x_arr=np.array([1.1,1.2,1.3])
y_arr=np.array([2.1,2.2,2.3])
conditon=np.array([True,False,True])
result=[(x if c else y) for x, y,c in zip(x_arr,y_arr,condition)]
r=np.where(condition,x_arr,y_arr)

#值替换的例子
arr=np.random.randn(4,4)]
arr1=np.where(arr>0,2,-2)#如果条件成立,返回2,如果不成立,返回-2
arr2=np.where(arr>0,2,arr)

8、数学运算与排序

arr=np.random.randn(4,4)
#对所有元素相关数学运算
print(arr.mean())
print(np.mean(arr))
print(arr.sum())
print(arr.std())、
#对某个轴进行运算
print(arr.mean(axis=1))#计算轴1上的平均值
print(arr.sum(0))


排序方法

arr=np.random.randn(4)
arr.sort()#从小到大
#多维数组排序
arr=np.random.randn(4,4)
arr.sort(1)#传递轴号,按轴排序
#如果不传参数,按照最外层的轴排序

9、numpy文件处理

numpy可以读写磁盘上的文本数据或者二进制数据
主要应用的函数就是np.save(),np.load(),默认情况下数据是以未压缩的原始二进制格式保存在扩展名为.npy的文件中

arr=np.arange(10)
np.save("any_array",arr)
np.load("any_array.npy")

保存为压缩文件

arr=np.arange(10)
np.savez("any_array",a=arr)#保存成一个压缩文件,数组以关键字参数的形式传入
np.load("any_array.npz")["a"]

保存为txt

arr=np.arange(10)
np.savetxt("any_array.txt",arr,delimiter=",")#保存一个文本文件,分隔符为逗号
np.loadtxt("any_array.txt",delimiter=",")

10、线性代数和随机漫步例子

#dot 剧展的乘法运算
x=np.array([[1, 2, 3], [4, 5, 6]])
y=np.array([[1,2],[2,3],[3,4]])
x.dot(y)
# trace计算对角线元素的和
#det 计算行列式
#eig 计算方阵的本征值和本征向量
# inv 计算方阵的逆

#随机漫步的例子
#求什么时候第一次,距离初始点10步原
position=0#初始化一个位置的值
walk=[position]#步值初始化
steps=1000#步数设置
for i in range (steps):
    step= 1 if np.random.randint(0,2) else -1
    position+=step
    walk.append(position)
plt.plot(walk)
print(np.abs(walk>10).argmax())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值