numpy中实现ndarray数组返回符合特定条件的索引方法

作者:wen123qiang 时间:2023-04-21 06:21:53 

在numpy的ndarray类型中,似乎没有直接返回特定索引的方法,我只找到了where函数,但是where函数对于寻找某个特定值对应的索引很有用,对于返回一定区间内值的索引不是很有效,至少我没有弄明白应该如何操作尴尬。下面先说一下where函数的用法吧。

(1)where函数的使用场景:

例如现在我生成了一个数组:


import numpy as np
arr=np.array([1,1,1,134,45,3,46,45,65,3,23424,234,12,12,3,546,1,2])

现在arr是一个含有18个元素的ndarray类型的数组,后面就用数组来称呼它吧。假如我想返回数组中所有元素值为3所对应的索引位置,那么通过where函数可以很轻松地完成。


print np.where(arr==3)

它会返回一个包含所有值为3对应的索引位置的元组,如下图:

numpy中实现ndarray数组返回符合特定条件的索引方法

可以看到在索引为5、9、14的地方所对应的元素值为3。通过这样的方式可以轻松达到目的。但是对于一定变化范围内的索引这样就不行了。下面的方法是自己想出来的折衷办法,比较笨,高手清喷。

(2)通过一个辅助的数组来解决一定范围内值索引的查找

我们建一个标识元素索引的数组,然后通过它来显示符合条件的元素对应的索引。还是刚才的数组,假如我现在要返回元素值在3到100之间值的索引。我可以生成一个和arr相同大小的数组,然后首先通过一次筛选找到大于3的元素对应索引的数组,继而在其中再次筛选,最终得到想要的结果。代码如下:


b=np.arange(len(arr))#生成和arr相同长度的数组

c=b[arr>3]#c存放的就是arr中大于3的元素对应的索引
#最后通过遍历c数组,选择3到100之间的值打印出来
for i in range(len(c)):
if arr[c[i]]<100:
 print c[i],

下面看一下执行的效果:

numpy中实现ndarray数组返回符合特定条件的索引方法

可以看到程序将所有介于3和100之间的元素对应的索引值打了出来,如果想同时获得索引值和相应的元素,只需将上面的“print c[i]”, 替换为 “print c[i],arr[c[i]]”即可。

当然这种方法也适用于选择某个特定值对应的索引,例如我想找到所有3对应的位置,可以用print b[arr==3]即可打印出所有值为3的元素所对应的索引。其实不论怎么做,都是用到了数组进行关系运算后生成布尔数组,然后让数组中为True的地方进行显示。

当然还可以通过两次进行筛选,分别筛选出大于3的元素和小于100的元素对应的索引数组,然后两个数组做交集处理,在numpy中有一个intersect1d函数可以进行这样的运算,但是仍然麻烦。目前只能想到这些办法,不知道有哪位高手有更好的方法,欢迎大家一起交流一下。

来源:https://blog.csdn.net/wen123qiang/article/details/49204551

标签:numpy,数组,索引,ndarray,条件
0
投稿

猜你喜欢

  • uni-app使用微信小程序云函数的步骤示例

    2024-05-13 09:10:51
  • Python实现softmax反向传播的示例代码

    2021-02-24 10:54:02
  • JS+CSS实现闪烁字体效果代码

    2024-04-18 09:31:04
  • python中单双下划线的区别对比分析

    2023-12-18 23:58:45
  • 三大原因:按照新HTML标准设计网页好处

    2008-11-12 11:23:00
  • OpenCV绘制圆角矩形的方法实例

    2023-07-15 11:37:17
  • Linux 下 Python 实现按任意键退出的实现方法

    2022-08-07 14:22:01
  • php中支持多种编码的中文字符串截取函数!

    2023-09-27 02:08:15
  • 详解如何通过Python实现批量数据提取

    2021-12-23 01:19:10
  • Bootstrap Multiselect 常用组件实现代码

    2024-05-21 10:14:36
  • Python绘制分类图的方法

    2021-08-10 04:09:13
  • python实现线性插值的示例

    2023-08-10 21:33:55
  • asp.net生成Excel并导出下载五种实现方法

    2023-07-06 11:01:16
  • MySQL无法创建外键的原因及解决方法

    2024-01-17 00:00:07
  • Python机器学习之K-Means聚类实现详解

    2022-01-20 07:05:14
  • 使用Python在Windows下获取USB PID&VID的方法

    2021-02-15 19:31:20
  • Entity Framework Core生成列并跟踪列记录

    2023-07-01 07:06:46
  • Python脚本传参数argparse模块的使用

    2023-02-28 23:07:21
  • 用python实现学生管理系统

    2021-05-22 12:13:31
  • IE和Firefox下event事件杂谈

    2024-04-22 13:25:33
  • asp之家 网络编程 m.aspxhome.com