栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 花式索引

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 花式索引

花式索引的定义

花式索引(Fancy indexing)是指利用整数数组进行索引,这里的整数数组可以是Numpy数组也可以是Python中列表、元组等可迭代类型。

一维数组的花式索引

创建一维数组arr1 = np.array([1.0,2,3,4])
花式索引arr1[1:4]获得[0,2,3] 不包含下标4

import numpy as np
#创建一维数组
arr1 = np.array([1,2,3,4])
print(arr1[1:4])

结果


如果数组有浮点数,那就会建立浮点数数组

二维数组的花式索引

花式索引获得指定下标的值
-(0,0)(2,2)(3,3)

arr2[(0,2,3),(0,2,3)]x,y一一对应也可以使用arr2[[0,2,3],[0,2,3]]效果是一样的

关于花式索引与其他索引组合比较详细的介绍

https://blog.csdn.net/wizardforcel/article/details/85850021

arr2 = np.array([[1,2,3,4,5],
                [4,5,6,7,8],
                [7,8,9,10,11],
                [10,11,12,13,14]])
# 得到的是(0,0),(2,2),(3,3)              
print(arr2[(0,2,3),(0,2,3)])
#索引第2,3行中的第0,2,3列(不连续的列使用元组或列表表示)
print(arr2[2:4,(0,2,3)])
最难的部分 花式索引如何随机选择行列

问题:如何获取(0,2,3)行的(0,2,3)列

方法一、原理上和下面的numpy.ix_()函数差不多,直接把用函数的转换过程省略了,但这个方法是最难理解的,通过numpy.ix()官方文档才明白(最初接触到的是这个方法,查了很久才明白)

arr2[[[0],[2],[3]],(0,2,3)]原理是维度匹配,维度相同一一匹配,维度不同每一个都匹配

这个的解释也不错
https://zhuanlan.zhihu.com/p/123858781

方法二、先取列,再取行(反过来也行)。这个是最容易理解的方法

arr2[:,[0,2,3]][[0,2,3]] 方法三、用numpy.ix_()函数

arr2[np.ix_([0,2,3],[0,2,3])]官方文档机翻,勉强能看

以下是代码

# 花式索引
arr2[[[0],[2],[3]],(0,2,3)] # [[0],[2],[3]]与(0,2,3)维度不同。每一个都会与(0,2,3)内所有元素相匹配一次
arr2[[[0],[2],[3]],[[0],[2],[3]]] # 维度相同,对应匹配
arr2[[0,2,3],2] # [0,2,3]都会与2匹配一次
arr2[(0,2,3),[[0],[2],[3]]]
arr2[([0],[2],[3]),(0,2,3)]
arr2[(0,2,3),([0],[2],[3])]
# =========================
arr3=arr2[:,[0,2,3]] # 先获得列
arr3[[0,2,3]] # 再从中选择行 (反过来也行
# 合并一下
# 因为花式索引返回的是ndarray,所以可以直接这样求
arr2[:,[0,2,3]][[0,2,3]] 
# =========================
# numpy.ix_(*args) 返回值为ndarray元组
# np.ix_函数就是输入两个数组,产生笛卡尔积的映射关系
# np.ix_函数,能把两个一维数组转换为 一个用于选取方形区域的索引器
np.ix_([0,2,3],[0,2,3]) # 返回了(array([[0],[2],[3]]),array([[0, 2, 3]]))
arr2[np.ix_([0,2,3],[0,2,3])]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号