首页 > 编程问答 >使用 np.array 索引过滤 Python 列表

使用 np.array 索引过滤 Python 列表

时间:2024-07-22 04:51:20浏览次数:11  
标签:python list filtering

谁能向我解释一下列表 self.data 如何使用numpy索引数组 selec_idx 进行索引/过滤? 完整的课程可在 https://github.com/kaidic/LDAM-DRW/blob/master/imbalance_cifar.py

def gen_imbalanced_data(self, img_num_per_cls):
        new_data = []
        new_targets = []
        targets_np = np.array(self.targets, dtype=np.int64)
        classes = np.unique(targets_np)
        # np.random.shuffle(classes)
        self.num_per_cls_dict = dict()
        for the_class, the_img_num in zip(classes, img_num_per_cls):
            self.num_per_cls_dict[the_class] = the_img_num
            idx = np.where(targets_np == the_class)[0]
            np.random.shuffle(idx)
            selec_idx = idx[:the_img_num]
            new_data.append(self.data[selec_idx, ...])
            new_targets.extend([the_class, ] * the_img_num)
        new_data = np.vstack(new_data)
        self.data = new_data
        self.targets = new_targets

我在网上搜索,找不到任何适合这段代码的解释。我发现您可以使用索引列表对 np.array 进行索引,但反之则不然。


代码段 self.data[selec_idx, ...] 使用了 NumPy 数组索引,它也称为 花式索引 。 这使你可以使用另一个数组(在本例中为 selec_idx )提取原始数组( self.data )的特定元素。 让我们来分解一下:

  1. selec_idx :这是一个 NumPy 数组,其中包含要从 self.data 中选择的元素的索引。 这些索引是通过之前代码中针对每个类的切片和随机排序操作生成的。

  2. self.data[selec_idx, ...] : 这是花式索引的魔力所在。 它使用 selec_idx 中的索引来从 self.data 中选择相应的行。 ... 是一个切片符号,表示选择所有列。

举例说明

假设 self.data 是一个类似于以下内容的 NumPy 数组:

[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9],
 [10, 11, 12]]

并且 selec_idx 是一个数组 [0, 2]

然后, self.data[selec_idx, ...] 会产生以下结果:

[[1, 2, 3],
 [7, 8, 9]]

这是因为 selec_idx 包含索引 0 2 ,它们对应于 self.data 的第一行和第三行。

简而言之,此代码段使用 selec_idx 中的索引有效地过滤了 self.data ,仅保留 selec_idx 中指定的索引处存在的行。 该操作对于基于特定条件或类别从数据集中选择子集非常有用,如你提供的代码中的不平衡数据集生成所示。

标签:python,list,filtering
From: 78775823

相关文章

  • 尝试在cmd(python)中安装turtle
    当我在cmd中编写pipinstallturtle后,这条消息出现在我面前。有人知道该怎么办吗?C:\>pipinstallturtleCollectingturtleUsingcachedturtle-0.0.2.tar.gz(11kB)ERROR:Commanderroredoutwithexitstatus1:command:'C:\Users\Bruger\App......
  • Python + Polars:如何有效地“fill_null”仅 DataFrame 的某些列?
    例如,假设我只想fill_null(strategy="zero")DataFrame的数字列。我当前的策略是这样做:final_df=df.select(cs.exclude(cs.numeric()))final_df.with_columns(df.select(cs.numeric()).fill_null(strategy="zero"))是否有替代的、更惯用或更有效的方法来实现我......
  • 如何找到 Windows 上 Python 的安装位置?
    我想找出我的Python在Windows上的安装路径。例如:C:\Python25如何找到Python的安装位置?在Windows上查找Python安装位置的方法有很多种:1.使用where命令(推荐方法):打开命令提示符(cmd)。输入以下命令并按回车键:wherepython......
  • Python Pandas:如何解析没有行结尾的 CSV
    如何解析没有行结尾的CSV文件?示例数据sep=;Id;Date;1;1980-02-29;2;1980-03-10;3;;可以使用lineterminator参数指定行终止符来解析没有行尾的CSV文件。在这种情况下,你可以将lineterminator设置为一个空字符串('')。以下是使用......
  • Python 中的 azure.ai.translation.document - 无法使用当前权限访问源文档位置
    我在使用Python中的azure.ai.translation.document库时遇到问题。我已经在Azure中设置了翻译服务以及带有两个容器的Blob存储。我已使用“用户委托密钥”创建了SAS连接。一种用于源(读取/列表),一种用于目标(写入/列表)。例如我尝试运行Python程序,但源b......
  • 博文标题:探索Python中的元编程:装饰器的魔法
    引言在Python的世界里,装饰器(Decorators)是一种非常强大的特性,它允许程序员在不修改原始函数代码的情况下,为函数添加新的功能。这种机制不仅增强了代码的可读性和可维护性,还提供了高度的灵活性和扩展性。本文将深入探讨装饰器的基本概念、工作原理以及如何利用它们来简化和......
  • 使用Python 和 Selenium 抓取 酷狗 音乐专辑 附源码
    在这篇博客中,我将分享如何使用Python和Selenium抓取酷狗音乐网站上的歌曲信息。我们将使用BeautifulSoup解析HTML内容,并提取歌曲和专辑信息。准备工作首先,我们需要安装一些必要的库:pipinstallrequestsbeautifulsoup4selenium代码实现以下是完整的代码:importosi......
  • ArrayList【源码解析】
    showDiagram         从上图可以看出我们的老朋友ArrayList实现了Cloneable、RandomAccess、Serializable3个接口,并且继承了AbstractList抽象类。1.Cloneable         Cloneable接口是Java中的一个标记接口,它没有任何方法定义,只是作为一个标志,表示实现......
  • 基于Django+Python的网易新闻与评论舆情热点分析平台
    一、引言在信息爆炸的时代,人们每天面对海量的信息流,如何从中筛选出有价值的信息并进行深度分析变得尤为重要。基于Django+Python的网易新闻与评论舆情热点分析平台,旨在为用户提供一个高效的数据分析工具,帮助用户快速理解新闻趋势、情感倾向以及公众对特定事件的看法。通过自......
  • Python解释器详解及其应用场景
    Python解释器及其应用场景一、Python解释器概述Python解释器是Python程序运行的核心,它负责读取Python代码(即.py文件)并将其转换为机器语言,从而使计算机能够执行。简单来说,Python解释器就像是Python代码与计算机之间的翻译官,把Python代码翻译成计算机能懂的语言。Python解释器......