Python的numpy选择特定行列的方法

 更新时间:2023年08月24日 10:39:42   作者:goodxin_ie  
这篇文章主要介绍了Python的numpy选择特定行列的方法,有时需要抽取矩阵中特定行的特定列,比如,需要抽取矩阵x的0,1行的0,3列,结果为矩阵域,需要的朋友可以参考下

numpy选择特定行列

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

比如,需要抽取矩阵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 N
    dimensions each, such that the shape is 1 in all but one dimension
    and the dimension with the non-unit shape value cycles through all
    N dimensions.
    Using `ix_` one can quickly construct index arrays that will index
    the 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]])

到此这篇关于Python的numpy选择特定行列的方法的文章就介绍到这了,更多相关numpy选择特定行列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • django用户登录和注销的实现方法

    django用户登录和注销的实现方法

    这篇文章主要介绍了django用户登录和注销的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 用Python实现数据的透视表的方法

    用Python实现数据的透视表的方法

    今天小编就为大家分享一篇用Python实现数据的透视表的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • pycharm远程linux开发和调试代码的方法

    pycharm远程linux开发和调试代码的方法

    这篇文章主要介绍了pycharm远程linux开发和调试代码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • PyTorch如何限制CPU线程数目

    PyTorch如何限制CPU线程数目

    这篇文章主要介绍了PyTorch如何限制CPU线程数目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python爬虫之selenium库的安装及使用教程

    python爬虫之selenium库的安装及使用教程

    今天带大家来学习怎么安装使用selenium库,文中有非常详细的图文介绍,对正在学习python爬虫的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Fabric 应用案例

    Fabric 应用案例

    下面介绍三个比较典型的应用Fabric的示例,涉及文件上传与校验,环境部署,代码发布功能
    2016-08-08
  • Python如何使用vars返回对象的属性列表

    Python如何使用vars返回对象的属性列表

    这篇文章主要介绍了Python如何使用vars返回对象的属性列表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 如何利用python的tkinter实现一个简单的计算器

    如何利用python的tkinter实现一个简单的计算器

    这篇文章主要给大家介绍了关于如何利用python的tkinter实现一个简单的计算器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 使用PyCharm安装pytest及requests的问题

    使用PyCharm安装pytest及requests的问题

    这篇文章主要介绍了使用PyCharm安装pytest及requests的相关资料,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 使用matlab或python将txt文件转为excel表格

    使用matlab或python将txt文件转为excel表格

    这篇文章主要介绍了matlab或python代码将txt文件转为excel表格,本文通过matlab代码和python 代码给大家详细介绍,需要的朋友可以参考下
    2019-11-11

最新评论