一、numpy库的一些常用函数
1、np.tile(A,reps) :
将数组的数据按照行列复制扩展,A为需要复制的数组,rep为:重复次数,可以是整数,表示沿每个维度重复的次数;也可以是元组,每个元素表示对应维度的重复次数。
a = np.arange(4)
#复制2次
np.tile(a,2)
#行列复制
np.tile(a,(3,2))
2、np.repeat(A,n):A 数组,复制n次
a = np.arange(1,13).reshape(3,4)
np.repeat(a,2)
np.repeat(a,2,axis=0)
np.repeat(a,2,axis=1)
将数组中的每个元素重复若干次
3、np.roll(A,n,axis) :A表示数组,n表示移位次数,axis表示沿什么轴移动
沿指定轴对数组元素进行移位#一维数组
#向后调3个
np.roll(a,3)
#向前调2个
np.roll(a,-1)
#二维数组
np.roll(aa,2)
np.roll(aa,2,axis=0)
4、resize(A,n) :A表示数组,n表示要变成的形状
重新调整数组的大小,如图所示将三行三列的数组a改变成一行九列数组
aa.reshape(4,3)#修改维度,元素个数必须相同
np.resize(aa,(5,6)) #resize重新调整数组的大小,元素个数可以不相同
5、place(A,B,C)/put(A,D,C):A为数组,B为条件,C为替换的值,D为指定的元素位置
将数组中满足条件的元素/指定的元素替换为指定的值
aa = np.random.randint(40,100,(3,4))
#小于60分的 全部替换为0
np.place(aa,aa<60,0)
#put()指定的索引处的元素替换为指定的值
aa = np.arange(1,13).reshape(3,4)
np.put(aa,2,100)
6、np.savetxt():将数据保存到txt文件中
运行以下代码,即在代码目录保存自定义命名的文件,注意需要指定数字保存格式
#保存
a = np.random.randint(-50,100,1000)
np.savetxt('savetxt.txt',a,fmt='%d')
7、np.loadtxt() :从文件中加载数据
b = np.loadtxt('savetxt.txt',dtype=int)
print(b)
此处需写入文件地址,我写的文件与代码在同一目录
8、np.genfromtxt():根据文件内容中生成数据,可以指定缺失值的处理等
示例: 假设有一个名为data.txt的文本文件,内容如下: 1,2,3 4,5,6 7,8,9
可以使用np.genfromtxt()读取该文件并生成一个numpy数组:
data = np.genfromtxt('data.txt', delimiter=',')
print(data)
输出结果为: [[1. 2. 3.] [4. 5. 6.] [7. 8. 9.]]
9、np.dot(A,B):矩阵相乘
#dot函数 矩阵相乘
x = np.array([[1,2],[3,4]])
y = np.array([[2,3],[1,2]])
x.dot(y)
x.dot(3) #每个元素与3相乘
即矩阵的行乘以另一个矩阵的列
10、np.sort():排序
一维数组排序:
a=np.array([5,2,4,6,1,9])
print('sort排序后:',np.sort(a))
print('argsort排序:',np.argsort(a))
二维数组排序:
np.random.seed(44)
a=np.random.randint(100,size=(4,6))
#直接使用sort排序指定axis的值
print(np.sort(a,axis=0))
print(np.sort(a,axis=1))
对数组进行排序,返回一个新的排好序的数组,原数组不变
11、np.argsort() :返回的是数组值从小到大排序后元素对应的索引值
即排序后原数组不变,输出排序完成数组的索引值,并且以数组形式打印
12、any / all :
any:如果数组中存在一个为 True 的元素(或者能转为 True 的元素),则返回True all:如果数组中所有元素都为 True (或者能转为 True 的元素),则返回 True#any函数 只要有一个元素为True,则结果返回True
#all函数 只有所有元素都为True,则结果返回True
x = np.array([False,True,True,1,None,0])
np.any(x)
np.all(x)
13、numpy 广播机制
两个数组相加:
import numpy as np
# 在numpy中存在广播机制
a=np.array([0,1,2])
print(a+5)
b=np.array([5,5,5])
print(a+b)
维度不相同的数组相加:
a=np.arange(3) #一行[0 1 2]
b=np.arange(3).reshape(3,1) #三行1列
print(a+b)
广播的规则
1
,如果两个数组维度个数不同,那么小维度的数组形状会在左边补1
2
,如果两个数组形状在任何一个维度上都不匹配,数组的形状会沿着维度为1
的维度扩展到匹配上另一个数组的形状
3
,如果没有维度形状为
1
,则会引发异常
a = np.arange(6).reshape(2, 3)
b = np.arange(6).reshape(3, 2)
print(a + b)
14、比较掩码
比较操作,会返回与参与运算数组形状相同的数组,其中,满足条 件的为 True ,不满足的为 False数组的比较操作:
a=np.array([[1,2,30],[45,67,89]])
print(a<60)
传入的数组,需要和
a
形状一致,且类型为
Bool
类型,这个叫做掩码式索引
掩码式索引取值,过滤掉不符合条件的:
print(a[np.array([[ True , True , True],[ True, False, False]])])
print(a[a<60])
取出元素大于50的:
np.random.seed(42)
a=np.random.randint(100,size=(3,4))
#取出数组中元素值大于50的
print(a[a>50])
15、魔法命令time
魔法命令是ipython 提供特殊命令,能实现一些特殊功能,比如统计时间(time/timeit) 和占用内存 (memit/mprun) 等功能。 魔法命令两种形式:%:行模式 ,%%:单元格模式 time 统计语句执行时间,被统计语句只执行一次。# 统计time.sleep(0.5)语句执行时间
import time
start = time.time()
time.sleep(0.5)
end = time.time()
end-start
16、魔法命令timeit
timeit可以循环多次执行被统计语句,得到平均执行时间,支持行模式和单元格模式。 timeit命令参数, -n 指定每轮测试次数, -r 指定测试轮数(默认为7) 单元格模式: 1、第一行语句(与 timeit 同一行语句)为初始化语句,作用为后续代码中变量提供初始化功能。 2、初始化语句执行次数由轮数来决定。 3、 初始化语句每轮测试只执行一次,且不参与计时。第二行至整个单元格末尾语句会执行相应次数, 并参与计时。# 46.1 ns ± 2.75 ns per loop (mean ± std.dev. of 7 runs, 10000000 loops each)
# 7 runs 运行7轮
# 10000000 loops 每轮循环执行次数
# 46.1 ns ± 2.75 ns per loop (mean ± std 均值是46.1 标准差是2.75 ns 【46.1 ns - 2.75,46.1ns + 2.75】
%timeit a=1
# -n 每轮循环的次数
# -r 执行轮数 默认是7轮
%timeit -n 1000 -r 2 a=1
%%timeit -n 2 -r 2
time.sleep(0.5)
time.sleep(0.6)
%%timeit -n 2 -r 3 print('初始化语句')
print('hello world')
%%timeit a = np.arange(100000)
# 1ms=1000us
a+=1
17、魔法命令writefile和run
writefile将单元格内容写入到文件中。如果文件不存在则创建,如果文件存在,则覆盖文件。如果指定-a 参数,则追加内容,不覆盖。如下创建写文件text.py
%%writefile test.py
x= 1
print(x)
print('hello world')
后面再次运行这段代码,则覆盖之前的内容
%%writefile -a test.py
print('update....')
run:
运行外部python
文件,运行结束后,外部文件中定义的变量得到保留。
其语法格式为:
%run test.py
a #使用文件中定义的变量
18、魔法命令memit
分析语句内存使用情况。memit 支持行模式与单元格模式。单元格模式下,初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存。%load_ext memory_profiler
#分析函数
def m1():
print('hello world')
%memit m1()
# 分析语句
%memit x=2