Numpy Array 获取按行搜索的行索引

Posted

技术标签:

【中文标题】Numpy Array 获取按行搜索的行索引【英文标题】:Numpy Array Get row index searching by a row 【发布时间】:2013-09-26 11:22:10 【问题描述】:

我是 numpy 的新手,我正在用 python 中的随机森林实现集群。我的问题是:

如何找到数组中确切行的索引?例如

[[ 0.  5.  2.]
 [ 0.  0.  3.]
 [ 0.  0.  0.]]

然后我查找[0. 0. 3.] 并得到结果 1(第二行的索引)。

有什么建议吗?遵循代码(不工作...)

    for index, element in enumerate(leaf_node.x):
        for index_second_element, element_two in enumerate(leaf_node.x):
            if (index <= index_second_element):
                index_row = np.where(X == element)
                index_column = np.where(X == element_two)
                self.similarity_matrix[index_row][index_column] += 1

【问题讨论】:

您应该提供简短、独立、正确(可编译)的示例sscce.org。更不用说“不工作”不是对问题的描述。 【参考方案1】:

为什么不简单地做这样的事情呢?

>>> a
array([[ 0.,  5.,  2.],
       [ 0.,  0.,  3.],
       [ 0.,  0.,  0.]])
>>> b
array([ 0.,  0.,  3.])

>>> a==b
array([[ True, False, False],
       [ True,  True,  True],
       [ True,  True, False]], dtype=bool)

>>> np.all(a==b,axis=1)
array([False,  True, False], dtype=bool)

>>> np.where(np.all(a==b,axis=1))
(array([1]),)

【讨论】:

你能用通配符做到这一点吗?比如第一个“0”。将被允许​​作为“任何值”? 如果我理解正确,请尝试:a[:,1:] == np.array([0, 3]) 而不是 a == b。所以我们所做的只是切掉第一列并如图所示进行比较。 好的 - 所以通配符是不可能的。出色的澄清。谢谢 np.where 真的返回索引吗?为什么文件显示不同的东西? numpy.org/doc/stable/reference/generated/numpy.where.html【参考方案2】:
a=[[ 0.,5.,  2.],
[ 0. , 0.,  3.],
[ 0.,  0.,  0.]]

for i in enumerate(a):
    if i[1]==[ 0. , 0.,  3.]:
        print(i[0])

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Numpy Array 获取按行搜索的行索引的主要内容,如果未能解决你的问题,请参考以下文章

numpy特性

获取numpy数组中元素的索引

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

numpy使用np.argmax函数获取一维数组中最大值所在的索引(index of largest value in numpy array with np.argmax)

如何沿一个轴获取 NumPy 数组中最大元素的索引

获取二维 numpy ndarray 或 numpy 矩阵中前 N 个值的索引