当前位置: 首页 > 面试题库 >

在二维numpy数组中查找匹配的行

袁霍英
2023-03-14
问题内容

我想获取与行匹配的二维Numpy数组的索引。例如,我的数组是这样的:

vals = np.array([[0, 0],
                 [1, 0],
                 [2, 0],
                 [0, 1],
                 [1, 1],
                 [2, 1],
                 [0, 2],
                 [1, 2],
                 [2, 2],
                 [0, 3],
                 [1, 3],
                 [2, 3],
                 [0, 0],
                 [1, 0],
                 [2, 0],
                 [0, 1],
                 [1, 1],
                 [2, 1],
                 [0, 2],
                 [1, 2],
                 [2, 2],
                 [0, 3],
                 [1, 3],
                 [2, 3]])

我想获取与行[0,1]相匹配的索引,该行是索引3和15。当我执行类似的操作时,numpy.where(vals == [0 ,1])

(array([ 0,  3,  3,  4,  5,  6,  9, 12, 15, 15, 16, 17, 18, 21]), array([0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0]))

我想要索引数组([3,15])。


问题答案:

您需要使用np.where函数来获取索引:

>>> np.where((vals == (0, 1)).all(axis=1))
(array([ 3, 15]),)

或者,如文档所述:

如果仅给出条件,则返回 condition.nonzero()

您可以直接调用.nonzero()返回的数组.all

>>> (vals == (0, 1)).all(axis=1).nonzero()
(array([ 3, 15]),)

分解:

>>> vals == (0, 1)
array([[ True, False],
       [False, False],
       ...
       [ True, False],
       [False, False],
       [False, False]], dtype=bool)

.all在该数组上调用方法(使用axis=1)可为您提供True两个均为True的位置:

>>> (vals == (0, 1)).all(axis=1)
array([False, False, False,  True, False, False, False, False, False,
       False, False, False, False, False, False,  True, False, False,
       False, False, False, False, False, False], dtype=bool)

并获取哪些索引是True

>>> np.where((vals == (0, 1)).all(axis=1))
(array([ 3, 15]),)

要么

>>> (vals == (0, 1)).all(axis=1).nonzero()
(array([ 3, 15]),)

我发现我的解决方案更具可读性,但是正如unutbu指出的那样,以下方法可能会更快,并且返回与相同的值(vals == (0,1)).all(axis=1)

>>> (vals[:, 0] == 0) & (vals[:, 1] == 1)


 类似资料:
  • 题目链接 牛客网 题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。 // html Consider the following matrix: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17,

  • 问题内容: 是否有一种简单的方法来查找二维数组中某个元素的邻居(即,元素周围的八个元素)?缺少只是以不同的组合减去和增加索引,像这样: … 等等。 问题答案: (伪代码) 当然,这几乎要花费原始硬编码解决方案的许多行,但是通过这一解决方案,您可以最大程度地扩展“邻居”(2-3个或更多单元格)

  • 一、题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、解题思路 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束。 如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行。 也就是说如果要查找的数字不在数组的

  • 问题内容: 我想通过指定2D数组中的列数将一维数组转换为二维数组。可能会像这样工作: numpy是否具有与我的虚构函数“ vec2matrix”相似的功能?(我知道您可以像2D数组一样索引1D数组,但这不是我拥有的代码中的选项- 我需要进行此转换。) 问题答案: 您要阵列。 其中,根据输入数组的大小推断新维的大小。

  • 问题内容: 我有两个numpy数组: 我想从p_rem中的p_a_colors中删除所有列,所以我得到: 我认为,某些事情应该像 但我只是不知道轴或[:]正确。 我知道 可以,但是我试图避免(python)循环,因为我也想要正确的性能。 问题答案: 这就是我要做的: 您需要执行void dtype事情,以便numpy整体比较行。之后,使用内置的set例程似乎是显而易见的方法。

  • 结论如下:[0,2]->[1,2]->[2,2]->[2,3]->[2,4]->[3,4]->[4,4]->[5,4]->[5,3]->[5,2]->[5,1]->[4,1]->[4,2]->[3,2]->[3,1]->[2,1]->[2,2]->[1,2]->[2,2]->[1,2]->[2,2]->[2,2]->[1,2]->[2,2]->[2,2]->[2,2]->[1,2] 我不明白故障在