简而言之,您可以:

A[:, range(3) + [6, 7]]

要么

A[:, np.r_[:3, 6, 7]]

要理解为什么你的第一次尝试不起作用,你需要更多地了解一般的python索引以及numpy的索引是如何工作的.

首先,切片表示法仅在切片内有效,因此blah = [:3,6,7]是无效的python语法,因为在这种情况下你正在构建一个新的列表. (你隐含地使用A [:,[:3,6,7]]来做这个.第二组括号创建一个新列表.)Numpy有一个特殊的(但经常讨厌)运算符来使用切片表示法来构造类似于你想要的东西:np.r_.例如:

In [1]: print np.r_[:3, 6, 7]

[0 1 2 6 7]

请注意,通过将两个列表一起添加,我们可以得到或多或少相同的结果(np.r_返回一个数组,下一个示例将返回一个列表):

In [2]: print range(3) + [6, 7]

[0, 1, 2, 6, 7]

然而,了解numpy窗帘背后发生的事情也很重要. numpy中有两种常见的索引类型. “正常”索引使用任何排序的切片并返回数组的视图.数据不会被复制. “花式”索引使用任意项目序列(例如列表)并复制数据.

因为可以通过标准切片表示法描述的任何内容都有常规步骤(即开始,结束和步骤间隔),所以您可以创建新数组而无需复制原始数据. (Numpy数组必须在内存中“定期跨越”.你可以在不复制数据的情况下引用“每三个项目”,但不能引用“第2,5和6项”,因为后者没有常规模式.)

所有这一切可能看起来令人困惑,但这里有一个重要原因的例子.让我们做一个示例数组并将它切成两种不同(但等效)的方式:

In [1]: a = np.arange(18).reshape(3, 6)

In [2]: a

Out[2]:

array([[ 0, 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10, 11],

[12, 13, 14, 15, 16, 17]])

In [3]: b = a[:, :3]

In [4]: b

Out[4]:

array([[ 0, 1, 2],

[ 6, 7, 8],

[12, 13, 14]])

In [5]: c = a[:, [0, 1, 2]]

In [6]: c

Out[6]:

array([[ 0, 1, 2],

[ 6, 7, 8],

[12, 13, 14]])

b和c看起来完全相同.但是,c是一段时间内数据的新副本,b引用原始数据.如果我们更改c,则不会修改a:

In [7]: c[0, 0] = 10000

In [8]: c

Out[8]:

array([[10000, 1, 2],

[ 6, 7, 8],

[ 12, 13, 14]])

In [9]: a

Out[9]:

array([[ 0, 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10, 11],

[12, 13, 14, 15, 16, 17]])

如果我们改变b,a将被修改:

In [10]: a

Out[10]:

array([[ 0, 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10, 11],

[12, 13, 14, 15, 16, 17]])

In [11]: b[0,0] = 99999

In [12]: a

Out[12]:

array([[99999, 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10, 11],

[ 12, 13, 14, 15, 16, 17]])

In [13]: b

Out[13]:

array([[99999, 1, 2],

[ 6, 7, 8],

[ 12, 13, 14]])

这使您可以对内存使用进行大量控制,并且允许numpy非常高效(当您开始在内存中使用非常大的数组时,这非常重要.).但是,如果您不知道发生了什么,您可能会被它灼伤.

python多个条件组合_python – 组合选择器条件相关推荐

  1. python判断语句入门教程_Python中的条件判断语句基础学习教程

    if语句用来检验一个条件, 如果 条件为真,我们运行一块语句(称为 if-块 ), 否则 我们处理另外一块语句(称为 else-块 ). else 从句是可选的. 使用if语句: ? 输出: ? 在这 ...

  2. python条件替换_Python中Numpy条件替换操作一例

    为了数据分析快捷方便,实际操作中,我们往往要对字符串标签进行0和1的转换操作,如性别:男和女.还有根据条件进行转换,比如:大于60的归为1,60以下的归为2. 以下是在Numpy中进行转换的例子: & ...

  3. python无限循环条件循环_python 语句,条件,循环

    #coding:utf-8 __author__ = 'Administrator' #想要在同一行打印,print后面加',' print 12, print 34 '''从模块导入函数 impor ...

  4. python条件控制语句_Python课堂笔记 条件控制语句

    事例1 mood = False if mood: print('go to left') else: print('go to right') 事例2 ACCOUNT = 'qiyue' PASSW ...

  5. python多条件求和_python – Numpy:条件求和

    我有以下numpy数组: import numpy as np arr = np.array([[1,2,3,4,2000], [5,6,7,8,2000], [9,0,1,2,2001], [3,4 ...

  6. python中满足条件相加_python – Numpy:条件求和

    我有以下numpy数组: import numpy as np arr = np.array([[1,2,3,4,2000], [5,6,7,8,2000], [9,0,1,2,2001], [3,4 ...

  7. python 类组合_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

  8. python文件合法模式组合_python设计模式之组合模式

    最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...

  9. python 类继承和组合_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

最新文章

  1. CCF201612-1 中间数(100分)
  2. BZOJ2822 [AHOI2012]树屋阶梯
  3. git学习------gt;写给 Git 初学者的7个建议
  4. mysql 事务块 sql_Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现
  5. react-native学习路线总结
  6. 速达软件开发版使用技巧-每页固定行样式报表设计
  7. centos 的网关和什么相同_CentOS操作系统:为什么转移到CentOS流是一个大错误
  8. 五分钟搭建 Flash 视频直播站
  9. php 从1累加到50,javascript - 一个数每隔一秒执行加1并打印出来,一直加到50停止,用js如何实现?...
  10. 串口调试助手哪个好用_哪个员工考勤系统好用?选择打卡助手就对了
  11. CPU虚拟化是否开启
  12. UML统一建模语言快速入门
  13. Python CT图像预处理——nii格式读取、重采样、窗宽窗位设置
  14. 便签记事内容怎么放到手机桌面上?
  15. 一切都显得那么苍白无力
  16. 从黑客文化看区块链开源社区的自我组织与成功之道
  17. Makefile 出现./simv up to date.如何解决?
  18. 股指期货套期保值、套利、投机
  19. 计算机毕业设计java课程设计程序设计SSM框架网上书城全套含微信支付
  20. 基于金字塔LK的光流法实现—根据论文自己实现的c++代码

热门文章

  1. 微信小程序(五)--- Vant组件库,API Promise化,MboX全局数据共享,分包相关
  2. 野火指南者移植hal+rtthread+lvgl
  3. Java学习:流程控制
  4. 北京熊通科技 招聘FPGA研发工程师
  5. c语言结构体冒泡排序,c语言结构体冒泡排序求教
  6. ipa文件反编译_iOS class-dump 反编译ipa包
  7. 包包的结构制图_原来可以用R这么画基因结构图
  8. 【转】《与MySQL的零距离接触》第四章:操作数据表中的记录 (4-2:MySQL 插入记录INSERT)
  9. 如何以正确地姿势AK SQL查询50题(精华篇)
  10. 摆的频率公式_频率与转速的公式