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

如果numpy数组元素高于特定阈值,则将其设置为零

宦翔
2023-03-14
问题内容

说,我有一个由10元素组成的numpy数组,例如:

a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])

现在我想有效地设置所有a值高于100,所以我会得到:

[2, 0, 0, 7, 9, 0, 0, 0, 5, 3]

因为我当前使用一个for循环,所以非常慢:

# Zero values below "threshold value".
def flat_values(sig, tv):
    """
    :param sig: signal.
    :param tv: threshold value.
    :return:
    """
    for i in np.arange(np.size(sig)):
        if sig[i] < tv:
            sig[i] = 0
    return sig

考虑到很多10^6元素,如何以最有效的方式实现呢?


问题答案:

通常,列表理解比forpython中的循环要快(因为python知道它不需要关心常规for循环中可能发生的许多事情):

a = [0 if a_ > thresh else a_ for a_ in a]

但是,正如@unutbu正确指出的那样,numpy允许列表索引,并且通过逐元素比较为您提供索引列表,因此:

super_threshold_indices = a > thresh
a[super_threshold_indices] = 0

会更快。

通常,将方法应用于数据向量时,请参阅numpy.ufuncs,其性能通常比使用任何本机机制映射的python函数要好得多。

@unutbu

In [7]: a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])

In [8]: a[a > 10] = 0

In [9]: a
Out[9]: array([2, 0, 0, 7, 9, 0, 0, 0, 5, 3])


 类似资料:
  • 假设,我有一个由个元素组成的numpy数组,例如: 现在,我想有效地将所有大于

  • 我有一个2D麻木阵列: 如何获取大于的元素的索引? 现在,我正在做以获取每个最大值的索引,结果是:。我如何实现上述操作?

  • 我试图从以下JSON文本中设置作者值,但我的代码正在删除json文本的所有其他子级。 我尝试将第一本书中的作者更新为以下其他值。 设置步骤后,我的json只有书[1]的内容,如下所示。请告知如何才能获得我用替换值作为输出给出的整个json输入。 问候,萨蒂什。

  • 如果给定的和等于数组中任意两个元素的和,函数需要返回true;否则函数需要返回false。

  • 问题内容: 我有一个numpy数组,我想强制将小于零的每个元素都设为零,并将每个大于255的元素强制降低到255。 例如。x =(-1,7,255,299)=>(0,7,255,255) 是否有一个不太复杂的单行代码可以完成此任务? 问题答案: 答案是numpy.clip 关于标题中的问题:不可以。您可以使用向量化将lambda函数应用于每个元素,但这并不是最佳选择。

  • 问题内容: 我下面有一个数组: 我想要的是基于阈值将此向量转换为二进制向量。以threshold = 0.5为例,大于0.5的元素将转换为1,否则转换为0。 输出向量应如下所示: 我怎样才能做到这一点? 问题答案: 布尔取暖 特殊情况: 如果您的数组值是介于0和1之间的浮动值并且您的阈值为0.5,则这是最佳解决方案。

  • 我需要找到高于指定阈值的的第一个和最后一个元素。我找到了以下解决方案,这是有效的,但它看起来有点令人费解。有没有更简单/更蟒蛇的方式?