前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python operator模块学习

python operator模块学习

作者头像
用户2936342
发布于 2018-08-27 07:29:15
发布于 2018-08-27 07:29:15
46500
代码可运行
举报
文章被收录于专栏:nummynummy
运行总次数:0
代码可运行

版权所有,禁止转载

operator模块是python中内置的操作符函数接口,它定义了一些算术和比较内置操作的函数。operator模块是用c实现的,所以执行速度比python代码快。

逻辑操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a=2
>>> b=5
>>> from operator import *
>>> not_(a)
False
>>> truth(a)
True
>>> is_(a, b)
False
>>> is_not(a,b)
True

比较操作符

所有富比较操作符都得到支持。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from operator import *
a = 1
b = 5
for func in (lt, le, eq, ne, ge, gt):
    print func(a,b)

这些函数等价于<、<=、==、>=和>的表达式语法。

算术操作符

处理数字的算术操作符也得到支持。 主要有:

  • 正反操作
    • abs
    • neg
    • pos
  • 算术操作
    • add
    • div
    • floordiv 整除除法
    • mod
    • mul
    • pow
    • sub
    • truediv(a,b) 浮点数除法
  • 位操作
    • and_ 按位与
    • invert 取反
    • lshift(c,d) 左移位
    • or_(c,d) 按位或
    • rshift(d,c) 右移位
    • xor(c,d) 异或

序列操作符

处理序列的操作符可以分为四组:建立序列,搜索元素,访问内容和从序列中删除元素。

  • 建立序列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = [1,2,3]
b = ['a', 'b', 'c']
print concat(a,b)
print repeat(a,3)
  • 搜索序列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print contains(a,1)    
print contains(b,"d")   
print countOf(a)
print countOf(b,"d")
print indexOf(a,1)
  • 访问序列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from operator import *
>>> a=[1,2,3]
>>> b=['a','b','c']
>>> getitem(b,1)
'b'
>>> getslice(a,1,3)
[2, 3]
>>> setitem(b,1,'d')
>>> b
['a', 'd', 'c']
>>> setslice(a,1,3,[4,5])
>>> a
[1, 4, 5]
  • 从序列中删除元素
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> delitem(b,1)
>>> b
['a', 'c']
>>> delslice(a,1,3)
>>> a
[1]

注意setitem和delitem会原地修改序列,而不会返回值。

原地操作符

除了标准操作符之外,很多对象类型还通过一些特俗操作符支持原地修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a=-1
>>> b=5
>>> c=[1,2,3]
>>> d=['a','b','c']
>>> a=iadd(a,b)
>>> a
4
>>> c=iconcat(c,d)
>>> c
[1, 2, 3, 'a', 'b', 'c']

属性和元素的获取方法

operator模块最特别的特性之一就是获取方法的概念,获取方法是运行时构造的一些可回调对象,用来获取对象的属性或序列的内容,获取方法在处理迭代器或生成器序列的时候特别有用,它们引入的开销会大大降低lambda或Python函数的开销。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from operator import *
class MyObj(object):
    def __init__(self, arg):
        super(MyObj, self).__init__()
        self.arg = arg
    def __repr__(self):
        return 'MyObj(%s)' % self.arg

objs = [MyObj(i) for i in xrange(5)]
print "Object:", objs

g = attrgetter("arg")
vals = [g(i) for i in objs]
print "arg values:", vals

objs.reverse()
print "reversed:", objs
print "sorted:", sorted(objs, key=g)

结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Object: [MyObj(0), MyObj(1), MyObj(2), MyObj(3), MyObj(4)]
arg values: [0, 1, 2, 3, 4]
reversed: [MyObj(4), MyObj(3), MyObj(2), MyObj(1), MyObj(0)]
sorted: [MyObj(0), MyObj(1), MyObj(2), MyObj(3), MyObj(4)]

属性获取方法类似于lambda x, n='attrname':getattr(x,nz) 元素获取方法类似于lambda x,y=5:x[y]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from operator import *

l = [dict(val=-1*i) for i in xrange(4)]
print "dictionaries:", l
g = itemgetter("val")
vals  = [g(i) for i in l]
print "values: ", vals
print "sorted:", sorted(l, key=g)

l = [(i,i*-2) for i in xrange(4)]
print "tuples: ", l
g = itemgetter(1)
vals = [g(i) for i in l]
print "values:", vals
print "sorted:", sorted(l, key=g)

结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dictionaries: [{'val': 0}, {'val': -1}, {'val': -2}, {'val': -3}]
values:  [0, -1, -2, -3]
sorted: [{'val': -3}, {'val': -2}, {'val': -1}, {'val': 0}]
tuples:  [(0, 0), (1, -2), (2, -4), (3, -6)]
values: [0, -2, -4, -6]
sorted: [(3, -6), (2, -4), (1, -2), (0, 0)]

除了序列之外,元素获取方法还适用于映射。

结合操作符和定制类

operator模块中的函数通过相应操作的标准Python接口完成工作,所以它们不仅适用于内置类型,还适用于用户自定义类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from operator import *

class MyObj(object):
    def __init__(self, val):
        super(MyObj, self).__init__()
        self.val = val
        return 

    def __str__(self):
        return "MyObj(%s)" % self.val

    def __lt__(self, other):
        return self.val < other.val

    def __add__(self, other):
        return MyObj(self.val + other.val)

a = MyObj(1)
b = MyObj(2)

print lt(a, b)
print add(a,b)

结果如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
True
MyObj(3)

类型检查

operator 模块还包含一些函数用来测试映射、数字和序列类型的API兼容性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from operator import *

class NoType(object):
    pass

class MultiType(object):
    def __len__(self):
        return 0

    def __getitem__(self, name):
        return "mapping"

    def __int__(self):
        return 0

o = NoType()
t = MultiType()

for func in [isMappingType, isNumberType, isSequenceType]:
    print "%s(o):" % func.__name__, func(o)
    print "%s(t):" % func.__name__, func(t)

结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
isMappingType(o): False
isMappingType(t): True
isNumberType(o): False
isNumberType(t): True
isSequenceType(o): False
isSequenceType(t): True

但是这些测试并不完善,因为借口没有严格定义。

获取对象方法

使用methodcaller可以获取对象的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from operator import methodcaller

class Student(object):
    def __init__(self, name):
        self.name = name

    def getName(self):
        return self.name

stu = Student("Jim")
func = methodcaller('getName')
print func(stu)   # 输出Jim

还可以给方法传递参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f=methodcaller('name', 'foo', bar=1)
f(b)    # return   b.name('foo', bar=1)

methodcaller方法等价于下面这个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def methodcaller(name, *args,  **kwargs):
      def caller(obj):
            return getattr(obj, name)(*args, **kwargs)
      return caller
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.04.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
CVPR2023 | Tensor4D 高效动态神经辐射场
由一个将所有场景变形映射到一个共同的正则配置的变形网络和一个从每个相机射线回归体积密度相关和视相关的RGB颜色的规范网络构成。
用户1324186
2023/09/09
7530
CVPR2023 | Tensor4D 高效动态神经辐射场
经典论文 | Nerf: 将场景表示为用于视图合成的神经辐射场
计算机视觉中一个研究方向是在 MLP 的权重中编码对象和场景,使得该 MLP 直接从 3D 空间位置映射到形状的隐式表示。然而,之前的方法无法使用离散的方式(如三角形网格或体素网格)以相同的保真度再现具有复杂几何形状的真实场景,迄今为止也仅限于表示具有低几何复杂性的简单形状,从而导致渲染过度平滑。NeRF提出将一个静态场景表示为5D输入,即:空间中某个位置的3D坐标以及观察方向,通过MLP神经网络得到该位置的颜色以及体密度,使用体绘制技术可以得到输入相机位姿条件下的视角图片,然后和 ground truth 做损失即可完成可微优化,从而渲染出连续的真实场景。
用户1324186
2022/11/07
3.7K0
经典论文 | Nerf: 将场景表示为用于视图合成的神经辐射场
CVPR 2024 | 巨幅提升24%!LiDAR4D会是LiDAR重建的答案么?
尽管神经辐射场(NeRFs)在图像新视角合成(NVS)方面取得了成功,但激光雷达NVS的发展却相对缓慢。之前的方法follow图像的pipeline,但忽略了激光雷达点云的动态特性和大规模重建问题。有鉴于此,我们提出了LiDAR4D,这是一种用于新的时空LiDAR视图合成的LiDAR-only的可微分框架。考虑到稀疏性和大规模特征,进一步设计了一种结合多平面和网格特征的4D混合表示,以实现从粗到细的有效重建。此外引入了从点云导出的几何约束,以提高时序一致性。对于激光雷达点云的真实重建,我们结合了ray-drop概率的全局优化,以保持cross-region模式。在KITTI-360和NuScenes数据集上进行的大量实验证明了我们的方法在实现几何感知和时间一致的动态重建方面的优越性。
公众号-arXiv每日学术速递
2024/04/25
7540
CVPR 2024 | 巨幅提升24%!LiDAR4D会是LiDAR重建的答案么?
ICCV 2023 | 单阶段扩散神经辐射场:3D生成与重建的统一方法
在计算机视觉和图形领域,由于神经渲染和生成模型的进步,三维视觉内容的合成引起了显著关注。尽管出现了许多处理单个任务的方法,例如单视图/多视图三维重建和三维内容生成,但开发一个综合框架来整合多个任务的最新技术仍然是一个主要挑战。例如,神经辐射场(NeRF)在通过每个场景的拟合解决逆向渲染问题方面展示了令人印象深刻的新视图合成结果,这适用于密集视图输入,但难以泛化到稀疏观察。相比之下,许多稀疏视图三维重建方法依赖于前馈图像到三维编码器,但它们无法处理遮挡区域的不确定性并生成清晰的图像。在无条件生成方面,三维感知的生成对抗网络(GAN)在使用单图像鉴别器方面部分受限,这些鉴别器无法推理跨视图关系以有效地从多视图数据中学习。 在这篇论文中,作者通过开发一个全面模型来从多视图图像中学习可泛化的三维先验,提出了一种统一的方法来处理各种三维任务。受到二维扩散模型成功的启发,论文提出了单阶段扩散NeRF(SSDNeRF),它使用三维潜在扩散模型(LDM)来模拟场景潜在代码的生成先验。 虽然类似的LDM已经应用于之前工作中的二维和三维生成,但它们通常需要两阶段训练,其中第一阶段在没有扩散模型的情况下预训练变分自编码器(VAE)或自解码器。然而,在扩散NeRF的情况下,作者认为两阶段训练由于逆向渲染的不确定性特性,特别是在从稀疏视图数据训练时,会在潜在代码中引入噪声模式和伪影,这阻碍了扩散模型有效地学习清晰的潜在流形。为了解决这个问题,论文引入了一种新的单阶段训练范式,使扩散和NeRF权重的端到端学习成为可能。这种方法将生成和渲染偏差协调地融合在一起,整体上提高了性能,并允许在稀疏视图数据上进行训练。此外,论文展示了无条件扩散模型学习到的三维先验可以在测试时从任意观察中灵活地采样用于三维重建。 论文在多个类别单一对象场景的数据集上评估了SSDNeRF,整体展示了强大的性能。论文的方法代表了朝着各种三维任务统一框架的重要一步。总结来说,论文的主要贡献如下:
用户1324186
2024/03/20
5070
ICCV 2023 | 单阶段扩散神经辐射场:3D生成与重建的统一方法
CVPR 2024 | Scaffold-GS:自适应视角渲染的结构化 3D 高斯
神经辐射场利用基于学习的参数模型来产生连续的渲染图像,并保留更多的细节。然而,其耗时的随机采样,会导致性能下降和出现潜在的噪声。
用户1324186
2024/05/20
1.8K0
CVPR 2024 | Scaffold-GS:自适应视角渲染的结构化 3D 高斯
InstantAvatar:从 60 秒单目视频中学习数字人化身
创建高保真数字人类对于许多应用都很重要,包括全息投影、AR/VR、3D 图形学和新兴的元宇宙等概念。目前获取个性化头像是一个复杂的过程,通常需要使用校准的多摄像头系统,并产生大量的计算成本。在本文中,作者着手构建一个仅从单眼视频学习 3D 虚拟人的系统,该系统足够轻便,可以广泛部署,并且速度足够快,可以实现步行和使用场景。
用户1324186
2023/02/03
2K0
AAAI 2024 | 深度引导的快速鲁棒点云融合的稀疏 NeRF
具有稀疏输入视图的新视角合成方法对于AR/VR和自动驾驶等实际应用非常重要。大量该领域的工作已经将深度信息集成到用于稀疏输入合成的NeRF中,利用深度先验协助几何和空间理解。然而,大多数现有的工作往往忽略了深度图的不准确性,或者只进行了粗糙处理,限制了合成效果。此外,现有的深度感知NeRF很少使用深度信息来创建更快的NeRF,总体时间效率较低。为了应对上述问题,引入了一种针对稀疏输入视图量身定制的深度引导鲁棒快速点云融合NeRF。这是点云融合与NeRF体积渲染的首次集成。具体来说,受TensoRF的启发,将辐射场视为一个的特征体素网格,由一系列向量和矩阵来描述,这些向量和矩阵沿着各自的坐标轴分别表示场景外观和几何结构。特征网格可以自然地被视为4D张量,其中其三个模式对应于网格的XYZ轴,第四个模式表示特征通道维度。利用稀疏输入RGB-D图像和相机参数,我们将每个输入视图的2D像素映射到3D空间,以生成每个视图的点云。随后,将深度值转换为密度,并利用两组不同的矩阵和向量将深度和颜色信息编码到体素网格中。可以从特征中解码体积密度和视图相关颜色,从而促进体积辐射场渲染。聚合来自每个输入视图的点云,以组合整个场景的融合点云。每个体素通过参考这个融合的点云来确定其在场景中的密度和外观。
用户1324186
2024/03/07
8500
AAAI 2024 | 深度引导的快速鲁棒点云融合的稀疏 NeRF
联合NeRF与特征网格,实现超大规模城市渲染,高效且逼真
机器之心报道 编辑:侯佳宁 在这项工作中,研究人员以大型城市场景渲染为目标,提出一个新的框架,集成了基于 MLP 的 NeRF 与显式 3D 重建的特征网格,以有效地编码局部和全局场景信息。该方法克服了现有方法在大规模场景中应用的各种缺点,即使在大规模城市场景中也能实现高保真度的渲染,这对于现实世界的应用场景至关重要。 纯基于 MLP 的神经辐射场(NeRF)由于模型容量有限,在大规模场景模糊渲染中往往存在欠拟合现象。最近有研究者提出对场景进行地理划分、并采用多个子 NeRF,分别对每个区域进行建模,然而,
机器之心
2023/05/09
4780
联合NeRF与特征网格,实现超大规模城市渲染,高效且逼真
SceneRF具有辐射场的自监督单目三维场景重建
之前一直都是在基于ColMap、OpenMVG、OpenMVS这些传统多视图几何的方法进行三维重建,但这些框架一方面无法在线端到端得完成重建,另一方面需要很多张高质量的RGB图。深度学习三维重建的方案往往又需要大量的标签来训练,泛化能力也比较弱,自监督3D重建方案一般也是去重建某个目标物体,直接对场景进行重建的工作还比较少。偶然间看到了SceneRF这篇论文,它可以基于单帧图像进行三维重建,感觉很神奇!
BBuf
2022/12/29
1.3K0
SceneRF具有辐射场的自监督单目三维场景重建
SIGGRAPH Asia 2023 | Im4D:动态场景的高保真实时新视角合成
动态视图合成是在给定输入视频的情况下渲染出真实动态场景的新视图,这是计算机视觉和图形学中一个长期存在的研究问题。这个问题的关键在于从多视角视频中有效地重建动态场景的 4D 表示,并允许在任意视点和时间上保持高保真度和实时渲染。
用户1324186
2023/12/28
5450
SIGGRAPH Asia 2023 | Im4D:动态场景的高保真实时新视角合成
六问Nerf | 简单易懂的神经辐射场入门介绍
最近零散时间,翻了一批讲Nerf原理的CSDN/知乎/B站文章和视频,有些讲的还是不错的,但是有些实在是让人感觉,作者本身就没搞懂啥是神经辐射场。所以本文使用自问自答的方式,尝试直击要害的讲清楚Nerf是干什么的。
一点人工一点智能
2023/01/15
5.6K0
六问Nerf | 简单易懂的神经辐射场入门介绍
6DoF视频技术研究进展
作者:王旭, 刘琼, 彭宗举, 侯军辉, 元辉, 赵铁松, 秦熠, 吴科君, 刘文予, 杨铀
一点人工一点智能
2023/08/24
8670
6DoF视频技术研究进展
ICCV 2023 | Seal-3D:神经辐射场的交互式像素级编辑
NeRF 在例如 3D 重建、自由视角合成以及 VR/AR 等众多 3D 应用中都具有巨大的潜力。随着这种隐式表征方式的流行,能够与这种类型的 3D 模型进行用户友好型编辑交互的工具被迫切需要。由于捕获数据的噪声和重建算法的限制,从真实世界重建的对象可能包含伪影。一方面,在典型的 3D 扫描流程中经常会有手动校正和细化以去除伪影的阶段。另一方面,在 3D 游戏、动画和拍摄等 3D 内容创建应用程序中,艺术创作者通常需要基于现有的 3D 模型创建新内容。
用户1324186
2023/09/09
4940
ICCV 2023 | Seal-3D:神经辐射场的交互式像素级编辑
ICCV 2023 | LERF:语言嵌入的辐射场
神经辐射场(NeRFs)已成为一种强大用于捕捉复杂现实世界 3D 场景的真实数字表征的技术。然而,NeRF 的即时输出只是一个有颜色的密度场,没有实际意义或上下文信息,这阻碍了构建与所生成的 3D 场景进行交互的接口。自然语言是用于与 3D 场景交互的直观接口。以图 1 中的厨房为例,想象一下,通过询问“餐具”在哪里,或者更具体地说,询问你可以用来“搅拌”的工具,甚至询问你最喜欢的带有特定标志的马克杯,你就可以对这个厨房了如指掌。这不仅需要处理自然语言输入查询的能力,还需要具有在多个尺度上整合语义,并与长尾和抽象概念相关的能力。
用户1324186
2023/11/24
4740
ICCV 2023 | LERF:语言嵌入的辐射场
神经辐射场去掉「神经」,训练速度提升100多倍,3D效果质量不减
没有了神经网络,辐射场(Radiance Fields)也能达到和神经辐射场(Neural Radiance Fields,NeRFs)相同的效果,但收敛速度快了 100 多倍。 2020 年,加州大学伯克利分校、谷歌、加州大学圣地亚哥分校的研究者提出了一种名为「NeRF」的 2D 图像转 3D 模型,可以利用少数几张静态图像生成多视角的逼真 3D 图像。其改进版模型 NeRF-W (NeRF in the Wild)还可以适应充满光线变化以及遮挡的户外环境,分分钟生成 3D 旅游观光大片。
机器之心
2021/12/28
1.6K0
神经辐射场去掉「神经」,训练速度提升100多倍,3D效果质量不减
SIGGRAPH 2023 | 用于实时辐射场渲染的 3D Gaussian Splatting
网格和点是最常见的可以用于基于 GPU/CUDA 快速光栅化的显式三维场景表征方式。而神经辐射场基于 MLP 使用体渲染对捕捉的场景化进行自由视角合成。而提升辐射场效率的方案目前多基于体素、哈希网格或是点。辐射场方法的连续性有助于场景的优化,但是渲染过程中所需的随机采样需要的花销较大同时会带来噪声。因此,在本文中,作者提出了一种新的方法:本文所提出的 3D 高斯表达在能达到 sota 视觉质量和可比的渲染时间的同时,本文所提出的基于 tile 的 Splatting 方法可以实时渲染 1080p 的结果。
用户1324186
2023/10/10
1.8K0
SIGGRAPH 2023 | 用于实时辐射场渲染的 3D Gaussian Splatting
【他山之石】3D Gaussian Splatting:实时的神经场渲染
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
马上科普尚尚
2023/12/15
3K0
【他山之石】3D Gaussian Splatting:实时的神经场渲染
每日学术速递3.29
1.Grid-guided Neural Radiance Fields for Large Urban Scenes
AiCharm
2023/05/15
2610
每日学术速递3.29
NeRFs和3D高斯溅射技术如何重塑SLAM:综述
文章:How NeRFs and 3D Gaussian Splatting are Reshaping SLAM: a Survey
点云PCL博主
2024/06/21
1.7K0
NeRFs和3D高斯溅射技术如何重塑SLAM:综述
CVPR2024 | HUGS:人体高斯溅射
真实渲染和人体动态是一个重要的研究领域,具有在AR/VR、视觉特效、虚拟试衣、电影制作等众多应用。早期的工作创建人类化身依赖于多相机捕捉设置中的高质量数据捕捉、大量计算和大量手工努力。最近的工作通过使用3D参数化身体模型如SMPL,直接从视频生成3D化身来解决这些问题,这些模型具有高效光栅化和适应未见变形的能力。然而,参数化模型的固定拓扑结构限制了对衣物、复杂发型和其他几何细节的建模。最近的进展探索了使用神经场来建模3D人类化身,通常使用参数化身体模型作为建模变形的模版。神经场在捕捉衣物、配饰和头发等细节方面表现出色,超越了通过纹理和其他属性光栅化参数化模型所能实现的质量。然而,它们也有不足,特别是在训练和渲染效率方面较低。
用户1324186
2024/05/31
6220
CVPR2024 | HUGS:人体高斯溅射
推荐阅读
相关推荐
CVPR2023 | Tensor4D 高效动态神经辐射场
更多 >
LV.1
上海交通大学研究员
目录
  • 逻辑操作
  • 比较操作符
  • 算术操作符
  • 序列操作符
  • 原地操作符
  • 属性和元素的获取方法
  • 结合操作符和定制类
  • 类型检查
  • 获取对象方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档