我想获取与行匹配的二维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] 我不明白故障在