目录
一、说明
二、numpy.ufunc函数概念
2.1 numpy.ufunc简介
2.2 numpy.ufunc.nin和numpy.ufunc.nout
2.3 numpy.ufunc.nargs
2.4  numpy.ufunc.ntypes
 2.5  numpy.ufunc.type
2.6 维度ndim和shape
三、ufunc的广播特性
四、函数格式
五、示例详解 
5.1 用输出参数
六、ufunc后的数列运算
6.1 数列运算
6.2 累计模式
6.3 对数组中某个index的元素进行局部处理 
 6.4 outer外积
 6.5 reduce方法
首页 后端开发 Python教程 Python中的numpy.ufunc函数怎么使用

Python中的numpy.ufunc函数怎么使用

May 18, 2023 pm 07:32 PM
python

一、说明

        numpy.ufunc是什么函数?答曰:就是numpy的函数,因为numpy针对的是数组张量,因此,几乎每一个函数都是ufunc。

二、numpy.ufunc函数概念

2.1 numpy.ufunc简介

        在整个数组上逐个元素地操作的函数。因此,ufunc是个泛指,这些函数为数众多。

        通用函数(或简称 ufunc)是一种以逐个元素的方式对 ndarrays 进行操作的函数,支持数组广播、类型转换和其他一些标准功能。Ufunc是将函数“向量化”的封装器,它使用固定数量的特定输入,并生成固定数量的特定输出。请查阅基础通用函数 (ufunc) 的详细信息。

        在NumPy中,通函数是numpy.ufunc类的实例 。 许多内置函数都是在编译的C代码中实现的。 基本的ufuncs对标量进行操作,但也有一种通用类型,基本元素是子数组(向量,矩阵等), 广播是在其他维度上完成的。也可以ufunc使用frompyfuncopen in new window工厂函数生成自定义实例。

2.2 numpy.ufunc.nin和numpy.ufunc.nout

        该函数表述出对应ufun函数的输入参数数量,如下列ufunc时对应的输入参数个数。

np.add.nin
2
np.multiply.nin
2
np.power.nin
2
np.exp.nin
2
登录后复制

该函数表述出对应ufun函数的输出参数数量,如下列ufunc时对应的输入参数个数。

np.add.nout
1
np.multiply.nout
1
np.power.nout
1
np.exp.nout
1
登录后复制

2.3 numpy.ufunc.nargs

numpy.ufunc对应参数的个数,

np.add.nargs
3
np.multiply.nargs
3
np.power.nargs
3
np.exp.nargs
2
登录后复制

如np.add函数有三个参数,两个输入,一个输出,如下:

a = np.array([2,4,5,6])
b = np.array([2,2,3,3])
c = np.zeros((4,))
np.add(  a,b,c )
print( c )
登录后复制
登录后复制

2.4 numpy.ufunc.ntypes

表明一个ufunc的输入数据类型格式:ufunc 可以操作的数字 NumPy 类型的数量——总共有 18 种。

np.add.ntypes
18
np.multiply.ntypes
18
np.power.ntypes
17
np.exp.ntypes
7
np.remainder.ntypes
14
登录后复制

2.5 numpy.ufunc.type

np.add.types
['??->?', 'bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l',
'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D',
'GG->G', 'OO->O']
np.multiply.types
['??->?', 'bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l',
'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D',
'GG->G', 'OO->O']
np.power.types
['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L',
'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G',
'OO->O']
np.exp.types
['f->f', 'd->d', 'g->g', 'F->F', 'D->D', 'G->G', 'O->O']
np.remainder.types
['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L',
'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'OO->O']
登录后复制

2.6 维度ndim和shape

表明维度的参数有两个,array.ndim 和 array.shape,其中ndim是指张量共几个维度,shape是指每个维度下的向量长度。比如下例:

x = np.array([1, 2, 3])
print(x.ndim)
print(x.shape)
 
y = np.zeros((2, 3, 4))
print(y.ndim)
print(y.shape)
登录后复制

结果:

1
(3,)
3
(2, 3, 4)

三、ufunc的广播特性

每个通函数接受数组输入并通过在输入上逐元素地执行核心功能来生成数组输出(其中元素通常是标量,但可以是用于广义ufunc的向量或更高阶子数组)。按照标准广播规则进行操作,以确保即使输入不具有完全相同的形状,仍能有效进行操作。 广播可以通过四个规则来理解:

  1. 所有输入数组都ndimopen in new window小于最大的输入数组,ndimopen in new window其形状前面有1个。

  2. 输出形状的每个维度的大小是该维度中所有输入大小的最大值。

  3. 如果输入在特定维度中的大小与该维度中的输出大小匹配,或者其值正好为1,则可以在计算中使用该输入。

  4. 当形状尺寸为1时,该维度中的第一个数据条目将被用于所有沿该维度的计算。换句话说,ufuncopen in new window的步进机械 将不会沿着该维度步进(对于该维度,步幅将为0)。

整个NumPy使用广播来决定如何处理不同形状的数组; 例如,所有算术运算(+-*之间,...)ndarraysopen in new window的数组操作之前广播。

如果上述规则产生有效结果,则将一组数组称为“可广播”到相同的形状, 即 满足下列条件之一:

  • 数组都具有完全相同的形状。

  • 数组都具有相同的维数,每个维度的长度是公共长度或1。

  • 尺寸太小的数组可以使其形状前置为长度为1的尺寸以满足属性2。

如果a.shape是 (5,1),b.shape是 (1,6),c.shape是 (6,)并且d.shape是 () 使得 d 是标量,则 a , b , c 和 d 都可以广播到维度 (5, 6); 和:

  • a 的作用类似于(5,6)数组,其中 [:, 0] 广播到其他列,

  • b 的作用类似于(5,6)数组,其中 b[0, :] 广播到其他行,

  • c被视为类似于一个(1,6)的矩阵,因此类似于一个(5,6)的矩阵,其中c的每一项元素被广播到每一行,最终,...

  • d 的作用类似于(5,6)数组,其中重复单个值。

四、函数格式

可以在通用函数 (ufunc) 的文档中找到有关 ufunc 的详细说明。

调用ufuncs格式:

op( *x[, out], where=True, **kwargs)

将 op 应用于参数 *x elementwise,广播参数。

广播规则是:

长度为 1 的维度可以添加到任一数组之前。

数组可以沿长度为 1 的维度重复。

参数:

*xarray_like

outndarray,None,或 ndarray 和 None 的元组,可选

用于放置结果的备用数组对象;如果提供,它必须具有输入广播的形状。数组元组(可能仅作为关键字参数)的长度必须等于输出的数量;对 ufunc 分配的未初始化输出使用 None。

wherearray_like,可选

此条件通过输入广播。当条件为 True 时,ufunc 的结果将被赋值给 out 数组。在其他地方,out 数组将保留其原始值。请注意,如果通过默认 out=None 创建未初始化的 out 数组,则其中条件为 False 的位置将保持未初始化状态。

五、示例详解

5.1 用输出参数

a = np.array([2,4,5,6])
b = np.array([2,2,3,3])
c = np.zeros((4,))
np.add(  a,b,c )
print( c )
登录后复制
登录后复制

5.2 行数组和列数组

a = np.arange(3)
b = np.arange(3)[:, np.newaxis]
 
print(a)
print(b)
登录后复制

输出:

[0 1 2]
[[0]
[1]
[2]]

5.3 广播规则示例

a = np.arange(3)
b = np.arange(3)[:, np.newaxis]
 
print(a)
print(b)
 
s = a + b
print(s)
登录后复制

六、ufunc后的数列运算

6.1 数列运算

在执行ufunc运算后,常常伴随数列运算,它们如下

__call__(*args, **kwargs)

Call self as a function.

accumulate(array[, axis, dtype, out])

Accumulate the result of applying the operator to all elements.

at(a, indices[, b])

Performs unbuffered in place operation on operand 'a' for elements specified by 'indices'.

outer(A, B, /, **kwargs)

Apply the ufunc op to all pairs (a, b) with a in A and b in B.

reduce(array[, axis, dtype, out, keepdims, ...])

Reduces array's dimension by one, by applying ufunc along one axis.

reduceat(array, indices[, axis, dtype, out])

Performs a (local) reduce with specified slices over a single axis.

resolve_dtypes(dtypes, *[, signature, ...])

Find the dtypes NumPy will use for the operation.

6.2 累计模式

累计模式不可以单独使用,而是与add以及multiply搭配使用:

np.add.accumulate([2, 3, 5])
array([ 2,  5, 10])
np.multiply.accumulate([2, 3, 5])
array([ 2,  6, 30])
登录后复制
np.add.accumulate(I, 0)
array([[1.,  0.],
       [1.,  1.]])
np.add.accumulate(I) # no axis specified = axis zero
array([[1.,  0.],
       [1.,  1.]])
登录后复制

6.3 对数组中某个index的元素进行局部处理

1) 将项目 0 和 1 设置为负值:

a = np.array([1, 2, 3, 4])
np.negative.at(a, [0, 1])
print( a )
array([-1, -2,  3,  4])
登录后复制

2) 递增项目 0 和 1,递增项目 2 两次:

a = np.array([1, 2, 3, 4])
np.add.at(a, [0, 1, 2, 2], 1)
print( a )
array([2, 3, 5, 4])
登录后复制

3) 将第一个数组中的项 0 和 1 添加到第二个数组,并将结果存储在第一个数组中:

a = np.array([1, 2, 3, 4])
b = np.array([1, 2])
np.add.at(a, [0, 1], b)
print(a)
array([2, 4, 3, 4])
登录后复制

6.4 outer外积

简单数组外积

np.multiply.outer([1, 2, 3], [4, 5, 6])
array([[ 4,  5,  6],
       [ 8, 10, 12],
       [12, 15, 18]])
登录后复制

张量的外积

A = np.array([[1, 2, 3], [4, 5, 6]])
A.shape
(2, 3)
B = np.array([[1, 2, 3, 4]])
B.shape
(1, 4)
C = np.multiply.outer(A, B)
C.shape; C
(2, 3, 1, 4)
array([[[[ 1,  2,  3,  4]],
        [[ 2,  4,  6,  8]],
        [[ 3,  6,  9, 12]]],
       [[[ 4,  8, 12, 16]],
        [[ 5, 10, 15, 20]],
        [[ 6, 12, 18, 24]]]])
登录后复制

6.5 reduce方法

a = np.multiply.reduce([2,3,5])
print( a)
30
登录后复制
X = np.arange(8).reshape((2,2,2))
X
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
np.add.reduce(X, 0)
array([[ 4,  6],
       [ 8, 10]])
np.add.reduce(X) # confirm: default axis value is 0
array([[ 4,  6],
       [ 8, 10]])
np.add.reduce(X, 1)
array([[ 2,  4],
       [10, 12]])
np.add.reduce(X, 2)
array([[ 1,  5],
       [ 9, 13]])
登录后复制

您可以使用 initial 关键字参数以不同的值初始化缩减,以及在何处选择要包含的特定元素:

np.add.reduce([10], initial=5)
15
np.add.reduce(np.ones((2, 2, 2)), axis=(0, 2), initial=10)
array([14., 14.])
a = np.array([10., np.nan, 10])
np.add.reduce(a, where=~np.isnan(a))
20.0
登录后复制
np.minimum.reduce([], initial=np.inf)
inf
np.minimum.reduce([[1., 2.], [3., 4.]], initial=10., where=[True, False])
array([ 1., 10.])
np.minimum.reduce([])
Traceback (most recent call last):
登录后复制

以上是Python中的numpy.ufunc函数怎么使用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql安装后怎么使用 mysql安装后怎么使用 Apr 08, 2025 am 11:48 AM

文章介绍了MySQL数据库的上手操作。首先,需安装MySQL客户端,如MySQLWorkbench或命令行客户端。1.使用mysql-uroot-p命令连接服务器,并使用root账户密码登录;2.使用CREATEDATABASE创建数据库,USE选择数据库;3.使用CREATETABLE创建表,定义字段及数据类型;4.使用INSERTINTO插入数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据。熟练掌握这些步骤,并学习处理常见问题和优化数据库性能,才能高效使用MySQL。

PS羽化如何控制过渡的柔和度? PS羽化如何控制过渡的柔和度? Apr 06, 2025 pm 07:33 PM

羽化控制的关键在于理解其渐变本质。PS本身不提供直接控制渐变曲线的选项,但你可以通过多次羽化、配合蒙版、精细选区,灵活调整半径和渐变柔和度,实现自然过渡效果。

mysql 是否要付费 mysql 是否要付费 Apr 08, 2025 pm 05:36 PM

MySQL 有免费的社区版和收费的企业版。社区版可免费使用和修改,但支持有限,适合稳定性要求不高、技术能力强的应用。企业版提供全面商业支持,适合需要稳定可靠、高性能数据库且愿意为支持买单的应用。选择版本时考虑的因素包括应用关键性、预算和技术技能。没有完美的选项,只有最合适的方案,需根据具体情况谨慎选择。

PS羽化怎么设置? PS羽化怎么设置? Apr 06, 2025 pm 07:36 PM

PS羽化是一种图像边缘模糊效果,通过在边缘区域对像素加权平均实现。设置羽化半径可以控制模糊程度,数值越大越模糊。灵活调整半径可根据图像和需求优化效果,如处理人物照片时使用较小半径保持细节,处理艺术作品时使用较大半径营造朦胧感。但需注意,半径过大易丢失边缘细节,过小则效果不明显。羽化效果受图像分辨率影响,且需要根据图像理解和效果把握进行调整。

mysql安装后怎么优化数据库性能 mysql安装后怎么优化数据库性能 Apr 08, 2025 am 11:36 AM

MySQL性能优化需从安装配置、索引及查询优化、监控与调优三个方面入手。1.安装后需根据服务器配置调整my.cnf文件,例如innodb_buffer_pool_size参数,并关闭query_cache_size;2.创建合适的索引,避免索引过多,并优化查询语句,例如使用EXPLAIN命令分析执行计划;3.利用MySQL自带监控工具(SHOWPROCESSLIST,SHOWSTATUS)监控数据库运行状况,定期备份和整理数据库。通过这些步骤,持续优化,才能提升MySQL数据库性能。

PS羽化对图像质量有什么影响? PS羽化对图像质量有什么影响? Apr 06, 2025 pm 07:21 PM

PS羽化会导致图像细节丢失、色彩饱和度降低和噪点增加。为了减少影响,建议使用较小的羽化半径,复制图层后再羽化,以及仔细对比羽化前后图像质量。此外,羽化并不适用于所有情况,有时蒙版等工具更适合处理图像边缘。

如何针对高负载应用程序优化 MySQL 性能? 如何针对高负载应用程序优化 MySQL 性能? Apr 08, 2025 pm 06:03 PM

MySQL数据库性能优化指南在资源密集型应用中,MySQL数据库扮演着至关重要的角色,负责管理海量事务。然而,随着应用规模的扩大,数据库性能瓶颈往往成为制约因素。本文将探讨一系列行之有效的MySQL性能优化策略,确保您的应用在高负载下依然保持高效响应。我们将结合实际案例,深入讲解索引、查询优化、数据库设计以及缓存等关键技术。1.数据库架构设计优化合理的数据库架构是MySQL性能优化的基石。以下是一些核心原则:选择合适的数据类型选择最小的、符合需求的数据类型,既能节省存储空间,又能提升数据处理速度

Bootstrap页面如何预览 Bootstrap页面如何预览 Apr 07, 2025 am 10:06 AM

Bootstrap页面的预览方法有:直接在浏览器中打开HTML文件;使用Live Server插件自动刷新浏览器;搭建本地服务器模拟线上环境。

See all articles