有时需要抽取矩阵中特定行的特定列。

比如,需要抽取矩阵x的0,1行的0,3列,结果为矩阵域

x = np.array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]])y = np.array([[ 0,  3],[ 4,  7]])

错误做法:第一反应这样写x[[0,1],[0,3]],然而得到的结果为

y
Out[22]: array([0, 7])

其实这种写法是抽去了[0,0],[1,3]两个位置的数。numpy的所有维度的坐标个数应该相等,且互相是配对的。

Numpy数组的整数数组索引,返回数据副本,而不是创建视图。相比切片索引,整数数组的索引更具有通用性,因为其不要求索引值具有特定规律。

整数数组索引要点如下:

  • 对于索引数组中未建立索引的维度(索引数组中的索引集数目小于被索引数组维度),默认被全部索引;
  • 索引结果数组的形状由索引数组的形状与被索引数组中所有未索引的维的形状串联组成,也就是说,若对数组的所有维度建立索引,则索引数组的形状等于结果数组的形状;
  • 若索引数组具有匹配的形状,即索引数组个数(索引集数)等于被索引数组的维度,此时结果数组与索引数组具有相同形状,且这些结果值对应于各维索引集的索引在索引数组中的位置;

正确的做法有以下几种:

1、先抽取行,再抽取列

 x[[0,1]][:,[0,3]]Out[31]:
array([[0, 3],[4, 7]])

2、由于结果数组与索引数组具有相同形状,且这些结果值对应于各维索引集的索引在索引数组中的位置,因此可以直接写目标数据的坐标

index = [[[0,0],[1,1]],[[0,3],[0,3]]]
x[index]Out[33]:
array([[0, 3],[4, 7]])

此种做法也可以利用numpy的广播机制,写为

x[[0,1],[[0],[3]]]
Out[39]:
array([[0, 4],[3, 7]])

注意与开始的错误写法对比

3、Numpy提供的函数ix_()更快地实现索引指定行列

ix_(*args)Construct an open mesh from multiple sequences.This function takes N 1-D sequences and returns N outputs with Ndimensions each, such that the shape is 1 in all but one dimensionand the dimension with the non-unit shape value cycles through allN dimensions.Using `ix_` one can quickly construct index arrays that will indexthe cross product. ``a[np.ix_([1,3],[2,5])]`` returns the array``[[a[1,2] a[1,5]], [a[3,2] a[3,5]]]``.

写法为:

i,j = np.ix_([0,1],[0,3])
x[i,j]Out[44]:
array([[0, 3],[4, 7]])

numpy选择特定的行列相关推荐

  1. 08_索引与切片,Indexing,Python风格的索引,index_select()选择特定索引,使用...索引任意多的维度,使用mask索引,take索引

    1.8.索引与切片 1.8.1.Indexing 1.8.2.Python风格的索引 1.8.3.index_select()选择特定索引 1.8.4.使用-索引任意多的维度 1.8.5.使用mask ...

  2. numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array)

    numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array) 目录

  3. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...

  4. 【Numpy】选择特定行列

    问题 方法 import numpy as npa = np.random.randint(0, 100, (3,3)) print(a)b = a[:, [0,2]] # 选择所有行, 第1.3列 ...

  5. Python+numpy实现矩阵的行列扩展

    对于numpy矩阵,行列扩展有三种比较常用的方法: 使用矩阵对象的c_方法扩展列,使用矩阵对象的r_方法扩展行. 使用numpy扩展库提供的insert()函数,使用axis参数指定行或列. 使用nu ...

  6. mysql against包含英文_在MySQL中使用MATCH和AGAINST选择特定列中包含字符串的行

    让我们首先创建一个表-mysql> create table DemoTable1833 ( Name varchar(20) ); 修改表-Mysql> alter table Demo ...

  7. mysql 选择特定的表_MySQL选择具有多个特定列的所有表

    我想获取具有3个特定列的所有表名. 我想要的是从信息模式中获取所有包含columnA AND columnB AND columnC的表名. 目前,我正在使用类似的查询 SELECT DISTINCT ...

  8. android action pick,android – 无法使用ACTION_PICK意图选择特定图...

    我正在使用这样的意图: Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media. ...

  9. numpy 获取特定数值的索引_入门Numpy、Pandas及案例实践

    用Python进行数据分析,需要用到数据分析相关的包,如本文中用到的pandas和numpy包. 本文目录: 用python分析一维数据 用python分析二维数据 案例:销售数据分析 一.一维数据分 ...

最新文章

  1. Bootstrap学习记录-2.container和table
  2. TCP通过滑动窗口和拥塞窗口实现限流,能抵御ddos攻击吗
  3. 挑战程序猿---三角形
  4. OpenCv 如何对图像的像素进行操作
  5. ashx误删后,未能创建类型
  6. 'objects' 报错问题
  7. 天线3db波束宽度_天线波束宽度计算公式
  8. HTTP状态码及含义
  9. 计算机桌面文字显示软件,电脑桌面添加文字_电脑桌面添加文字软件
  10. IDEA Maven项目添加本地jar包
  11. android打印机字体大小,打印自定义文档  |  Android 开发者  |  Android Developers
  12. Linux zip与unzip:通过正则式解压压缩包内指定的文件
  13. 拼接大屏数据展示_拼接大屏幕实现的功能与特点
  14. Fiddler基本使用
  15. 【汇正财经】选股有什么策略?如何找到适合自己的选股策略?
  16. python 的 return 详解
  17. RSA加密解密C++实现
  18. weex android 图标,U乐网址 -官网
  19. 知识图谱学习笔记八(知识问答)
  20. 【Ybt OJ】[数学基础 第3章] 同余问题

热门文章

  1. 微信怎样收发邮件,一款更全能的掌上邮箱,随心邮你
  2. 跨越“数字鸿沟”,日本老年智能化服务的解法
  3. 蓝牙BLE之系统学习
  4. 行业标准 | 证券期货业信息系统运维管理规范 JR/T 0099—2012
  5. 【开发教程9】疯壳·开源蓝牙心率防水运动手环-心率监测
  6. 面试程序员被问“你的缺点是什么”,我该怎么回答?
  7. 【Java】银行账户管理系统
  8. 年前更新 阿里云冬季实战营第二期:Linux操作系统实战入
  9. 什么是数字签名?(内含漫画图解)
  10. MongoDB 3.2.7 for rhel6.4 副本集-分片集群部署