首页
学习
活动
专区
圈层
工具
发布

numpy数组中冒号和负号的含义

numpy数组中":"和"-"的意义 在实际使用numpy时,我们常常会使用numpy数组的-1维度和":"用以调用numpy数组中的元素。也经常因为数组的维度而感到困惑。...总体来说,":"用以表示当前维度的所有子模块 "-1"用以表示当前维度所有子模块最后一个,"负号用以表示从后往前数的元素,-n即是表示从后往前数的第n个元素"#分片功能 a[1: ] 表示该列表中的第1...个元素到最后一个元素,而,a[ : n]表示从第0个元素到第n个元素(不包括n) import numpy as np POP_SIZE = 3 total_size = 10 idx = np.arange...[7 8 9] # good_idx_2 [0 1 2 3 4 5 6] # good_idx_3 [3 4 5 6 7 8 9] # good_idx_4 [0 1 2] 测试代码 import numpy...,所以程序运行两次 # s # s # s print('b1[-1:]\n', b1[-1:]) # 写在最后一个维度的":"没有实质性作用,此处表示的意思和b1[-1]相同 # b1[-1:] #

3K20

在Python机器学习中如何索引、切片和重塑NumPy数组

机器学习中的数据被表示为数组。 在Python中,数据几乎被普遍表示为NumPy数组。 如果你是Python的新手,在访问数据时你可能会被一些python专有的方式困惑,例如负向索引和数组切片。...在本教程中,你将了解在NumPy数组中如何正确地操作和访问数据。 完成本教程后,你将知道: 如何将你的列表数据转换为NumPy数组。 如何使用Pythonic索引和切片访问数据。...像列表和NumPy数组的结构可以被切片。这意味着该结构的一个子序列也可以被索引和检索。 在机器学习中指定输入输出变量,或从测试行分割训练行时切片是最有用的。...Rows: 3 Cols: 2 将一维数组重塑为二维数组 通常需要将一维数组重塑为具有一列和多个数组的二维数组。 NumPy在NumPy数组对象上提供reshape()函数,可用于重塑数据。...(3, 2) (3, 2, 1) 概要 在本教程中,你了解了如何使用Python访问和重塑NumPy数组中的数据。 具体来说,你了解到: 如何将你的列表数据转换为NumPy数组。

21.7K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    课时47:魔法方法:定制序列

    协议(Protocols)与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在Python中的协议就显得不那么正式。事实上,在Python中,协议更像是一种指南。...这有点像Python极力推崇的鸭子类型【扩展阅读】鸭子类型(duck typing) 在Python中,像序列类型(如列表、元组、字符串)或映射类型(如字典)都是属于容器类型。...本节来讲定制容器,那就必须先知道,定制容器有关的一些协议。 如果说你希望定制的容器是不可变的话,你只需要定义__len__()和__getitem__()方法。...如果你希望定制的容器是可变的话,除了__len__()和__getitem__()方法,你还需要定义__setitem__()和__delitem__()两个方法。...定义获取容器中指定元素的行为,相当于 self[key] __setitem__(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value

    45330

    《流畅的Python》第十二章学习笔记

    子类化内置类型 在Python2.2之前,内置类型不能子类化 内置类型不会掉用用户定义的类覆盖的特殊方法。...,我们继承内置类型dict并重写了它的__setitem__方法,但是只有使用d['two'] = 2才生效了 ⚠️原生类型的这种行为违背了面向对象编程的一个基本原则:始终应该从实例「self」所属的类开始搜索方法...,即使在超类实现的类中调用也是如此。...,必须显式传入self参数,因为这样访问的是未绑定方法 处理多重继承的建议 把接口继承和实现继承区分开 创建子类的原因: 继承接口,创建子类型,实现「是什么」关系 继承实现,通过重用避免代码重复 接口继承是框架的支柱...混入类应该提供某方面的特定行为,只实现少量关系非常紧密的方法。 在名称中明确指明混入 混入即把两个对象或者类的内容,混合起来,从而实现一些功能的复用。

    58810

    流畅的 Python 第二版(GPT 重译)(七)

    Python 中的可迭代协议代表了鸭子类型的极端形式:解释器尝试两种不同的方法来迭代对象。 为了明确起见,我在本节中描述的行为是在解释器本身中实现的,主要是用 C 语言编写的。...这个__future__导入是在PEP 563—注解的延迟评估中引入的,实现在 Python 3.7 中。这种行为原计划在 3.10 中成为默认值,但该更改被推迟到以后的版本。...如果将来有人更改class语句以更改基类或添加另一个基类,他们可能会忘记更新__setitem__的内容,从而引入错误。 第二个原因是,super实现了处理具有多重继承的类层次结构的逻辑。...在 Python 3 中,你仍然可以显式提供super()的第一个和第二个参数。³ 但只有在特殊情况下才需要,例如跳过部分 MRO 进行测试或调试,或者解决超类中不希望的行为。...例如,在dict的子类中重写的__getitem__()不会被内置的get()方法调用。 示例 14-1 说明了这个问题。 示例 14-1.

    83210

    《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器 (上)

    现在考虑子类SongBird,它添加了唱歌的行为: >>> class SongBird(Bird): ... def __init__(self): ......原因是这样的:在SongBird中,构造方法被重写,但新的构造方法没有任何关于初始化hungry特性的代码。...__setitem__(self,key,value):这个方法应该按一定的方式存储和key相关的value,该值随后可使用__getitem__来获取。当然,只能为可以修改的对象定义这个方法。...CounterList类严重依赖于它的子类化超类(list)的行为CounterList类没有重写任何的方法(和append extend, index一样)都能被直接使用。...在两个被重写的方法中,super方法被用来调用相应的超类的方法,只在__init__中添加了所需的初始化counter特性的行为,并在__getitem__中更新了counter特性。

    72130

    Python中的魔法属性

    魔法属性 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method,例如类的初始化方法 __init__() ,实例对象创造方法 __new__()等。...魔法属性和方法是Python内置的一些属性和方法,有着特殊的含义。命名时前后加上两个下划线,在执行系统特定操作时,会自动调用。...注:此方法一般无须定义,因为Python是一门高级语言,有 内存管理、垃圾回收机制,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__ 的调用是由解释器在进行垃圾回收时自动触发执行的...这需要实现两个魔术方法: __enter__ 和 __exit__。 __enter__(self): 定义了当使用 with 语句的时候,会话管理器在块被初始创建时要产生的行为。...copy.copy() 返回了你的对象的一个浅拷贝——这意味着,当实例本身是一个新实例时,它的所有数据都被引用了——例如,当一个对象本身被复制了,它的数据仍然是被引用的(因此,对于浅拷贝中数据的更改仍然可能导致数据在原始对象的中的改变

    70320

    Python中的魔法属性

    魔法属性 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method,例如类的初始化方法 __init__() ,实例对象创造方法 __new__()等。...魔法属性和方法是Python内置的一些属性和方法,有着特殊的含义。命名时前后加上两个下划线,在执行系统特定操作时,会自动调用。...注:此方法一般无须定义,因为Python是一门高级语言,有 内存管理、垃圾回收机制,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__ 的调用是由解释器在进行垃圾回收时自动触发执行的...这需要实现两个魔术方法: __enter__ 和 __exit__。 __enter__(self): 定义了当使用 with 语句的时候,会话管理器在块被初始创建时要产生的行为。...copy.copy() 返回了你的对象的一个浅拷贝——这意味着,当实例本身是一个新实例时,它的所有数据都被引用了——例如,当一个对象本身被复制了,它的数据仍然是被引用的(因此,对于浅拷贝中数据的更改仍然可能导致数据在原始对象的中的改变

    69620

    Python中的魔法属性

    魔法属性 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method,例如类的初始化方法 __init__() ,实例对象创造方法 __new__()等。...魔法属性和方法是Python内置的一些属性和方法,有着特殊的含义。命名时前后加上两个下划线,在执行系统特定操作时,会自动调用。...注:此方法一般无须定义,因为Python是一门高级语言,有 内存管理、垃圾回收机制,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__ 的调用是由解释器在进行垃圾回收时自动触发执行的...这需要实现两个魔术方法: __enter__ 和 __exit__。 __enter__(self): 定义了当使用 with 语句的时候,会话管理器在块被初始创建时要产生的行为。...copy.copy() 返回了你的对象的一个浅拷贝——这意味着,当实例本身是一个新实例时,它的所有数据都被引用了——例如,当一个对象本身被复制了,它的数据仍然是被引用的(因此,对于浅拷贝中数据的更改仍然可能导致数据在原始对象的中的改变

    1.4K01

    python 接口 、继承、重载运算符

    序列`__getitem__` 2. `__setitem__` 3. 抽象基类 4. 不要直接子类化内置类型 5. 继承顺序 6. 重载运算符 learn from 《流畅的python》 1....序列__getitem__ 如果没有 __iter__ 和 __contains__ 方法, Python 会调用 __getitem__ 方法, 设法让 迭代 和 in 运算符可用 class...10 for i in f: print(i) # 0, 10, 20 # 如果没有 __iter__ 和 __contains__ 方法, # Python 会调用 __getitem__...不要子类化内置 类型,用户自己定义的类 应该继承 collections 模块 中的类,例如 UserDict、UserList 和 UserString,这些类做了特殊设计,因 此易于扩展 import...继承顺序 多重继承的同名方法调用,根据类的 __mro__ 属性顺次在类中查找 推荐使用 super() 函数 6.

    50130

    python的抽象基类

    与jvm上的语言不一样,python的语言没有interface关键字,而且除了抽象基类,每个类都有相应的接口:类实现或继承的公开属性(方法或数据类型) 在定义里,受保护的属性和私有属性不在接口中:即便...我们可以在test1已经实例化后,再设置__setitem__,在运行时修改类和模块,而不改动源码,这就是所谓的“猴子补丁”。...“鸭子类型”:忽略对象的真正类型,转而关注对象有没有实现所需的方法,签名和语义。 继承抽象基类很简单,只要实现python里的特殊方法__len__之类的,这样python就会自动识别。...抽象基类的继承大多都是在collections模块,现在打开这个模块的文档看看。...Hashable的子类,也就是判断是否存在__hash__

    1.3K10

    python 魔术方法(一) 自定义容器类与类属性控制

    引言 此前的文章中,我们介绍了 Python 面向对象编程及对象的继承和派生。 接下来的几篇文章,我们将详细介绍 Python 解释器提供的一系列特殊方法 -- 魔术方法。 2....魔术方法 在面向对象编程中,我们介绍了 __init__ 方法,这是由解释器默认实现,在构造对象是自动调用的特殊方法,类似的,Python 提供了一系列左右两边被一对双下划线包着的方法,这些方法被称为“...元素的更改与删除 — __setitem__ 与 __delitem__ __setitem__(self, key, value) __delitem__(self, key) 上面我们实现的容器类是不可变的...delitem__ 就是分别在更改容器元素值和删除元素时被自动调用的魔术方法。...因为在 __init__ 方法中,对 values 成员初始化的行为让解释器自动去调用了 __setattr__ 方法,而在 __setattr__ 方法中,values 成员尚未被创建,因此抛出了异常

    92420

    __getitem__

    实现了__iter__()的实例虽能用于for循环,看似像list,但并不能将其当做list来使用,比如,Fib()[5]还是报错 可通过实现__getitem__()方法,;来实现让实例像list...那样按照下标取出元素 实现按照下标取元素 class Fib(object): def __getitem__(self, n): a, b = 1,...__()传入的参数可能是一个int,也可能是一个切片对象slice,因此需要做判断   如果把对象看成dict,__getitem__()的参数也可能是一个可以作key的object,例如str...__()还是有很多工作要做的 __setitem__和__delitem__   与之对应的还有__setitem__()方法和__delitem__()方法,分别用于为某个元素设值和删除某个元素...  总之,通过上面的方法,可自定义的类表现得和Python自带的list、tuple、dict没什么区别,这完全归功于动态语言的"鸭子类型",不需要强制继承某个接口

    81510

    Python教程(23)——Python类中常用的特殊成员

    这些特殊成员在类的定义中具有特殊的语法和功能,用于实现对象的特定行为和操作。 特殊方法一般由Python解释器调用,无需手动调用。...通过在类中定义这些特殊方法,可以改变对象的默认行为,使其具备更多的功能和操作。特殊方法提供了一种更加Pythonic的面向对象编程的方式,可以让代码更加简洁和易读。...__getitem__和__setitem__ __getitem__ 和 __setitem__ 几乎都是成对出现的,__getitem__ 用于定义对象的索引操作,即允许通过索引值访问对象的元素,_...通过实现 __getitem__ 和 __setitem__方法,我们可以使用类似于列表的方式通过索引来访问和设置 data 列表中的元素。...如果一个类没有定义 __getitem__ 和 __setitem__方法,或者__getitem__ 和 __setitem__方法不能处理给定的索引值或切片对象,那么当我们尝试通过索引或切片来访问(

    47910

    python 列表的实现探析

    中的list不是我们所学习的list),在CPython中,列表被实现为长度可变的数组。...在实现过程中,Python在创建这些数组时采用了指数分配的方式,其结果导致每次操作不都需要改变数组的大小,但是也因为这个原因添加或取出元素的平均复杂度较低。...同样以Python的内置类型list为例进行说明: 实现了__setitem__方法,就可以对列表中的元素进行修改,如a = [1,2],代码a[0]=2就是在调用这个方法 实现了__delitem__...甚至都不必这么严格,可能只需要实现__len__,__getitem__两个方法就可以称作是不可变序列类型。对于可变序列也同样如此。 鸭子类型的思想贯穿了Python面向对象编程的始终。...另外如果事先知道存储在列表中的数据类型都相同,比如都是整形或者字符等类型,可以考虑使用arrays库,或者numpy库,两者都提供更直接的数组内存存储模型,而不是上面的指针引用模型,因此在访问和存储效率上面会更高效一些

    2.2K20

    深入理解Python面向对象-类特殊成员

    普通字段 公有普通字段:对象可以访问;类内部可以访问;派生类中可以访问 私有普通字段:仅类内部可以访问; 私有字段其实不是不能访问,只是Python解释器对私有成员命名做了更改,对象.类名_私有字段名...,子类可以通过self.foo访问父类定义的变量;在静态公有字段中,使用的是Base.name访问。...上一篇我们其实讲过的,静态字段属于类所有,在类中只保存一份,所以它与继承无关,不管经过多少重继承,静态字段只有一份,只能通过类自身来访问。...当我们在类上面加上一些说明,通过此方法可以进行查看,同样也可以查看库函数的说明 __module__ 和 class__ __module__ 表示当前操作的对象在那个模块 __class 表示当前操作的对象的类是什么...此方法一般无须定义,因为Python是一门高级语言,程序员在使用时不需要关心内存的分配和释放,因为都是交给Python解释器来执行,所以析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

    73010

    python3学习之类成员、扩展父类方法

    ,只在类中可以访问,通过对象访问不了 ,继承的父类和子类中也无法调用,只在本类中可以 #PS:不到万不得已不要在外部访问私有字段,obj....__需要在类中定义 #__str__      打印对象时是对象的内存地址,类中定义了__str__方法后,可以自定义输出内容及格式 #__dict__     打印该对象包含的所有方法 #__getitem...__   __setitem__  __delitem__   当对象参数是列表时,实际上调用了这些方法 #__iter__     对象默认不可迭代,当定义了该方法,才可以;当对象放在for循环里,默认调用对象的...__iter__方法(这是规定) #issubclass(cls1,cls2)    判断cls1是不是cls2的子类,返回True或者False #isinstance(obj,classname)   ...判断obj是不是classname的实例(继承也算是) ##调用父类方法 #方法1  主动执行父类的方法:  super(子类,self).父类方法;扩展父类方法的功能时使用;父类和子类的方法名需要相同

    1.2K20
    领券