Numpy学习和使用二

9 篇文章 0 订阅
2 篇文章 0 订阅

Numpy学习和使用二

一、数学函数

numpy支持向量处理ndarray对象,提高程序运算速度。
在这里插入图片描述numpy.reciprocal() 函数返回参数逐元素的倒数。如 1/4 倒数为 4/1。

二、算术函数

numpy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。

a=np.arange(9,dtype=float).reshape(3,3)
b=np.array([10,10,10]) # 使用一维数组与二维数组的没一行相加
# print(np.add(a,b))
# print(a+b)


# print(np.subtract(a,b))# 使用一维数组与二维数组的没一行相减
# print(a-b)


# print(np.multiply(a,b)) # 使用一维数组与二维数组的没一行相乘
# print(a*b)


# print(np.divide(a,b))# 使用一维数组与二维数组的没一行相除
# print(a/b)

numpy.mod() 计算输入数组中相应元素的相除后的余数。

a=np.array([10,10,30])
b=np.array([3,5,7])
print(np.mod(a,b))
print(a%b)

三、统计函数

numpy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。 具体如下:
在这里插入图片描述
numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

x = np.arange(1,5)
y = np.empty_like(x)
np.power(x, 2, out=y) # 对x数组中的每个元素进行二次方的幂运算,将输出结果输出赋值给y(覆盖掉y原来的值)
print(y)

median()函数的使用

a=np.array([4,2,1,5])
#计算偶数的中位数
print('偶数的中位数:',np.median(a))
a=np.array([4,2,1])
print('奇数个的中位数:',np.median(a))


a=np.arange(1,16).reshape(3,5)

numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。
算术平均值是沿轴的元素的总和除以元素的数量。
mean()函数的使用

a=np.arange(1,11).reshape(2,5)


print(np.mean(a)) #对于多维数组,如果不传递axis,则是计算所有数据的平均值
print('调用mean函数 axis=0 列')
print(np.mean(a,axis=0)) # 在0轴上求平均值,对每一列求平均值
print('调用mean函数 axis=1 行')
print(np.mean(a,axis=1))# 在1轴上求平均值,对每一行求平均值

其他函数的使用

a = np.random.randint(10,50,size=5)
np.max(a)
np.sum(a)
np.min(a)
np.max(a)
np.unique(a)
np.nonzero(a)

四、矩阵相乘

a = np.array([1,2,3])
b = np.array([4,5,6])
t = a.dot(b) # 一维数组的点乘运算 对应元素相乘后再相加的结果 == np.dot(a,b)
print("t:",t)
X = np.array([
   [7,8,9],
   [10,11,12]
])
X.dot(a) # 矩阵数组(二维)与向量数组(一维)点乘
#dot函数 矩阵相乘
A = np.array([[1,2],[3,4]])
B = np.array([[2,3],[1,2]])
A.dot(B)
## 矩阵相乘前提是,第一个矩阵的列数和第二个矩阵的行数要相同

五、数组排序

排序中主要用到的方法是np.sort和np.argsort。其中np.sort()是对数组直接排序。而np.argsort()是返回排序后的原始索引。

a=np.array([5,2,4,6,1,9])
print('sort排序后:',np.sort(a))
print('argsort排序:',np.argsort(a))

二维数组排序

b = np.random.randint(100,size=(4,6))
#直接使用sort排序指定axis的值

print(np.sort(b,axis=0)) # 在0轴方向排序,垂直方向,每一列排序
print(np.sort(b,axis=1)) # 在1轴方向排序,水平方向,每一行排序

上面的结果其实不是实际想要的,在实际中,其实想按某列或者某行进行排序,返回列所对应的行。
按最后一列进行排序:

b = np.random.randint(100,size=(4,6))
c = b[:,0] # 先选择第一列的数据
# 根据第一列进行排序,返回排序后对应的元素所在原始位置的索引
index = np.argsort(c) 
print(b[index]) # 根据第一列数据大小所对应的索引对行进行排序

六、numpy广播机制

什么是numpy广播机制?
numpy 中的广播机制(Broadcast)旨在解决不同形状数组之间的算术运算问题。
如果数组与某个数运算,则将数组中的每个元素与该数运算
广播机制可以通过对某个数组或两个数组在水平或垂直方向的拉伸,使其变成形状相同的数组,从而进行运算

a = np.array([[ 0, 0, 0],
      [10,10,10],
      [20,20,20],
      [30,30,30]])
b = np.array([1,2,3])
print(a+b)


c=np.arange(3) # 一维[0 1 2]
d=np.arange(3).reshape(3,1) # 形状为3x1的二维数组
print(c+d)

七、比较掩码

比较操作,会返回与参与运算数组形状相同的数组,其中,满足条件的为True,不满足的为False
传入的数组,需要和数组形状一致,且类型为Bool类型,这个叫做掩码式索引
掩码式索引取值,过滤掉不符合条件的:

# 掩码式索引取值,过滤掉不符合条件的 
a=np.array([[1,2,30],[45,67,89]])
print(a[a<60])
# 元素值大于50的
a=np.random.randint(100,size=(3,4))
#取出数组中元素值大于50的
print(a[a>50])

八、魔法命令time
魔法命令是ipython提供特殊命令,能实现一些特殊功能,比如统计时间(time/timeit)和占用内存(memit/mprun)等功能。

魔法命令两种形式:

%:行模式
%%:单元格模式

# time魔法命令的行模式
%time time.sleep(0.5)
%%time 
time.sleep(0.5)
time.sleep(0.6)
# time魔法命令的单元格模式
#将%%time放在代码块的顶行顶格

九、魔法命令timeit

timeit魔法命令介绍
timeit计时更为精确
timeit可以循环多次执行被统计语句,得到平均执行时间,支持行模式和单元格模式。
timeit命令参数,-n指定每轮测试次数,-r指定测试轮数

# 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.1 ns + 2.75】
%timeit a=1
# -n 每轮循环的次数
# -r 执行轮数 
%timeit -n 1000 -r 2 a=1

单元格模式
第一行语句(与timeit同一行语句)为初始化语句,作用为后续代码中变量提供初始化功能。
初始化语句执行次数由轮数来决定。
初始化语句每轮测试只执行一次,且不参与计时。第二行至整个单元格末尾语句会执行相应次数,并参与计时。

%%timeit -n 2 -r 3 print('初始化语句')
print('hello')
print('python')

十、魔法命令writefile和run

writefile将单元格内容写入到文件中。如果文件不存在则创建,如果文件存在,则覆盖文件。如果指定-a参数,则追加内容,不覆盖。

%%writefile writefile_test.py
print('hello')
print('writefile')
复制
%%writefile -a writefile_test.py
print('append....')

run
运行外部python文件,运行结束后,外部文件中定义的变量得到保留。
语法格式:

%run 文件路径
%run test.py
a #使用文件中定义的变量

十一、魔法命令memit

分析语句内存使用情况。memit支持行模式与单元格模式。单元格模式下,初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存。
说明:
memit不是Ipython内置,需要安装memory_profiler模块(pip install memory_profiler==0.60.0);
安装后,需要通过%load_ext memory_profiler载入,才能使用;

%load_ext memory_profiler
#分析函数
def m1():
  print('hello world')
%memit m1()

peak memory(峰值内存)是运行此代码的进程消耗的内存。increment增量只是由于添加这行代码而需要/消耗的内存。同样的逻辑也适用于以下其他的显示。

十二、魔法命令mprun

逐行分析语句内存使用情况。
语法格式:
%mprun -f 分析函数 执行语句
分析结果列如下:
Line行号
Mem usage内存使用大小
increment内存增量
Line content代码内容
说明:
1、mprun不是Ipython内置,需要安装memory_profiler模块
2、安装后,需要通过%load_ext memory_profiler载入,才能使用
3、mprun测试的内容必须定义在独立模块中,不能定义在交互式Ipython环境中
4、如果需要重新加载模块,可以调用importlib模块提供reload函数实现

%%writefile mprun_test.py
def fun_test():
  li1 = list(range(10000))
  li2 = list(range(10000))

%load_ext memory_profiler

import mprun_test

%mprun -f mprun_test.fun_test mprun_test.fun_test()

【示例】 修改代码重新计算

import importlib
importlib.reload(mprun_test)
%mprun -f mprun_test.fun_test mprun_test.fun_test()
  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆龙泰氽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值