Python理解Numpy库中进行数值计算的ufunc函数运算机制

理解numpy中ufunc函数的基本运算以及广播机制

概念:ufunc函数全称为通用函数,能够对数组中的所有元素进行操作的函数,也就是说,在numpy库中有对应的各种函数可以实现math库中函数对应的基本功能
一.基本运算方法:(对维数相同的数组进行举例)
四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**)。
相关代码为:

#定义两个ndarray数组,实现对ufunc函数性质的简单运用
#对数组进行四则运算
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
print("四则运算:+:结果为:",a+b)
print("四则运算:-:结果为:",a-b)
print("四则运算:*:结果为:",a*b)
print("四则运算:/:结果为:",a/b)
print("四则运算:**:结果为:",a**b)

运行结果为:
在这里插入图片描述
注意:我们可以看到,对数组进行四则运算时,维数相同的数组之间都是对应元素进行操作,一对一模式进行运算
在进行运用numpy中的ufunc函数进行运算时,必须将numpy模块进行引入,若觉得库名较长,可取别名,否则之间使用库名,规则详见代码注释

比较运算:>、>=、<、<=、==(等于)、!=(不等于)

相关代码为:

#定义两个ndarray数组,实现对ufunc函数性质的简单运用
#对数组进行比较运算
#import 库名 as 别名
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
print("比较运算:>:结果为:",a>b)
print("比较运算:<:结果为:",a<b)
print("比较运算:>=:结果为:",a>=b)
print("比较运算:<=:结果为:",a<=b)
print("比较运算:==:结果为:",a==b)
print("比较运算:!=:结果为:",a!=b)

相关结果为:
在这里插入图片描述
注意:我们可以看到,对数组进行比较运算时,维数相同的数组之间都是对应元素进行操作,一对一模式进行运算的,进行比较运算得到的是boolean布尔类型数组

逻辑运算:逻辑或:or(在numpy库中使用别名.any()函数表示)、逻辑与:and(在numpy库中使用别名.and()函数表示)

相关代码为:

#定义两个ndarray数组,实现对ufunc函数性质的简单运用
#对数组进行比较运算
import numpy as np
a = np.array([1,2,3])
b = np.array([4,0,6])
print("逻辑运算:or:结果为:",np.any(a))
print("逻辑运算:all:结果为:",np.all(b))

结果为:
在这里插入图片描述
注意:我们可以看到,对数组进行逻辑运算时,只要数组存在0元素时,结果便为Flase;若数组中均为非0元素,则结果为True,结果为Boolean值

二.广播机制:
基本要求:(轴是行与列的总称,即为横轴(行)和纵轴(列)的统称)

(1).所有输入数组都向其中的维数最长的数组看齐,维数不同的部分通过复制其数组进行维数补充,相当于利用自身进行增广
(2).输出数组的维数是输入数组的综合最大维数
(3).输入数组之间对应轴的长度相同,或者其中某个数组存在某个轴(行或列)长度为1时,才能够用来计算,对应下列四种情况,否则会报错
(4).当输入数组存在某个轴(行或列)长度为1时,沿着此轴运算时都用此轴的第一组值,与(1)相照应

看代码进行理解规则:
1.(维数同)

#定义两个ndarray数组,实现对ufunc函数性质的广播机制
import numpy as np
a = np.array([[-1,2,3],[1,2,3]])
b = np.array([[4,0,6],[2,4,6]])
print("ufunc函数的广播机制(实现不同维度数组的相关基本运算):结果为:")
print(a+b)

结果为:
在这里插入图片描述
当两数组维数相同时,依然是数组对应元素相加

2.(列同行不同,有一数组必须行为1维)

#定义两个ndarray数组,实现对ufunc函数性质的广播机制
import numpy as np
a = np.array([-1,2,3])
b = np.array([[4,0,6],[2,4,6]])
print("ufunc函数的广播机制(实现不同维度数组的相关基本运算):结果为:")
print(a+b)

相关结果为:
在这里插入图片描述
运算原理为:
a为1行3列矩阵,b为2行3列矩阵,进行运算时,a的自增一行,且第二行元素与第一行元素相同,在与b对应元素进行相加,(即相当于b的每一行元素都与a的第一行元素对应元素进行相加)
a = [
[-1,2,3],
[-1,2,3]]
b =[
[4,0,6],
[2,4,6]]

3.(行同列不同,有一数组必须列为1维)

#定义两个ndarray数组,实现对ufunc函数性质的广播机制
import numpy as np
a = np.array([[-1],[1],[2]])
b = np.array([[4,0,6],[2,4,6],[2,4,5]])
print("ufunc函数的广播机制(实现不同维度数组的相关基本运算):结果为:")
print(a+b)

结果为:
在这里插入图片描述
a为3行1列矩阵,b为3行3列矩阵,进行运算时,a的自增两列,且第二、三列元素与第一列元素相同,在与b对应元素进行相加,(即相当于b的每一列元素都与a的第一列元素对应元素进行相加)
a = [
[-1,-1,-1],
[1,1,1],
[2,2,2]]
b = [
[4,0,6],
[2,4,6],
[2,4,5]]

3.(行列均不同,但一数组必须列为1维,另一数组必须行为一维)

#定义两个ndarray数组,实现对ufunc函数性质的广播机制
import numpy as np
a = np.array([-1,1,2])
b = np.array([[4],[2],[2]])
print("ufunc函数的广播机制(实现不同维度数组的相关基本运算):结果为:")
print(a+b)

在这里插入图片描述
a为1行3列矩阵,b为3行1列矩阵,进行运算时,a的自增两列,且第二、三列元素与第一列元素相同;b自增两行,且第二、三行元素与第一行元素相同,(即相当于b的每一列元素都与a的第一行元素对应元素进行相加)
a = [
[-1,1,2],
[-1,1,2],
[-1,1,2]]
b = [
[4,4,4],
[2,2,2]
[2,2,2]]

除了这四种情况在操作时能正常运行,其他形式的数组进行基本数据操作时,均会得到数组维数不一致的报错提示,读者可一一进行尝试

这时我们知道,在numpy中的ufunc函数是泛指各类运算函数,只要涉及到了numpy创建数组进行简单运算的,就相当于默认使用了numpy中的ufunc通用函数,而ufunc函数并不存在,它只是numpy库中进行运算函数的泛称

若觉得内容稍可,请留下你们的

在这里插入图片描述
,欢迎评论区留言哦!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值