当前位置: 首页 > 知识库问答 >
问题:

这是在np中输出最后一个值的有效方法。如果找不到元素,是否使用argmax(数组>值)而不是0?[副本]

杨选
2023-03-14

让我们看看np。数组:

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

我使用此代码查找第一列中的第一个元素,其中的值大于阈值:

index = np.argmax(array[:, 0] > threshold)

现在取阈值=1,我得到了预期的索引:

>>index = 2

但是如果我选择一个大于2的值,输出是0。这将打乱我的程序,因为我想采取最后一个值,而不是第一个,以防没有元素满足阈值。

在这种情况下,是否有有效的方法获取数组的最后一个值?

我真的不明白这对我有什么帮助: Numpy:如何在Numpy数组的每一列中找到第一个非零值?

我在寻找类似于使argmax返回False而不是0的东西。

import numpy as np
import time

def first_nonzero(arr, axis, invalid_val=-1):
    mask = arr != 0
    return np.where(mask.any(axis=axis), mask.argmax(axis=axis), invalid_val)


array = np.random.rand(50000, 50000) * 10
test = array[:, 0]
threshold = 11

t1 = time.time()
index1 = np.argmax(array[:, 0] > threshold) if any(array[:, 0] > threshold) else len(array[:, 0])-1
elapsed1 = time.time() - t1

t2 = time.time()
index2 = first_nonzero(array[:, 0] > threshold, axis=0, invalid_val=len(array[:, 0])-1)
elapsed2 = time.time() - t2

print(index1, "time: ", elapsed1)
print(index2, "time: ", elapsed2)
>>49999 time:  0.012960195541381836
>>49999 time:  0.0009734630584716797

所以@Divakar的解决方案超级快!非常感谢!

共有2个答案

邴俊友
2023-03-14

这是一种效率稍低的方法,但您可以使用numpy。argwhere

#check whether there are elements exceeding the threshold
present = np.argwhere(array[:, 0] > threshold)

if present.size == 0:
  index = len(array)-1
else:
  index = np.argmax(array[:, 0] > threshold)
印晋
2023-03-14

试试下面的一行。如果至少有一个元素满足条件,则会获得argmax索引。否则取最后一个索引。

index = np.argmax(array[:,0]>threshold) if any(array[:,0]>threshold) else  len(array[:,0])-1
 类似资料:
  • 这是我的代码,当它应该输出7时,它输出0。非常感谢您在这里提供的任何帮助(我必须使用continue和for语句,不允许使用while语句作为必需品)。

  • 问题内容: 我有一个非常大的NumPy数组 我想检查数组的第一列中是否存在一个值。我有很多本地方法(例如遍历每一行并进行检查),但是鉴于数组的大小,我想找到最有效的方法。 谢谢! 问题答案: 怎么样 编辑:我认为以与@detly版本相同的方式实现

  • 在Transform函数中编写NodeJS Transform stream时,我如何知道该块是最后一块还是没有任何新块出现。 所以我需要知道何时进入Stream的块结束,对由所有块组成的缓冲区进行一些处理,然后从流中推送处理过的数据。

  • 本文向大家介绍写出一个函数,输入是两个数组,输出是将两个数组中所有元素排序以后用一个数组输出。相关面试题,主要包含被问及写出一个函数,输入是两个数组,输出是将两个数组中所有元素排序以后用一个数组输出。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: //快速排序 //两路归并 cerr << "内存分配失败" << endl;  

  • 问题内容: Elasticsearch文档 建议 *他们的一段代码 *文件固定 对应于sql查询 但实际上对应于 我不想知道我有多少不同的值,但是什么是不同的值。有人知道如何实现吗? 问题答案: 在字段上使用术语汇总。并且您需要注意如何分析要获取不同值的字段,这意味着您需要确保在建立索引时没有对它进行标记,否则聚合中的每个条目都是一个不同的术语,属于字段内容。 如果您仍然希望令牌化并使用聚合,则可

  • 问题内容: 我正在尝试该功能。 从numpy文档中,我了解到,如果仅给出一个数组作为输入,它应该返回该数组非零的索引(即“ True”): 如果仅给出条件,则返回元组condition.nonzero(),其中condition为True的索引。 但是,如果尝试一下,它将返回一个包含两个元素的 元组 ,其中第一个是所需的索引列表,第二个是空元素: 所以问题是:为什么?这种行为的目的是什么?在什么情