python - 如何仅替换 numpy 数组中大于某个值的前 n 个元素?

标签 python arrays performance numpy

我有一个这样的数组 myA:

array([ 7,  4,  5,  8,  3, 10])

如果我想用 0 替换所有大于值 val 的值,我可以简单地这样做:

myA[myA > val] = 0

这给了我想要的输出(对于 val = 5):

 array([0, 4, 5, 0, 3, 0])

但是,我的目标不是全部替换,而是仅替换此数组中大于值 val 的前 n 个元素。

因此,如果 n = 2,我想要的结果将如下所示(10 是第三个元素,因此不应被替换):

array([ 0,  4,  5,  0,  3, 10])

一个简单的实现是:

import numpy as np

myA = np.array([7, 4, 5, 8, 3, 10])
n = 2
val = 5

# track the number of replacements
repl = 0

for ind, vali in enumerate(myA):

    if vali > val:

        myA[ind] = 0
        repl += 1

        if repl == n:
            break

这行得通,但也许有人可以想出一种巧妙的掩蔽方式!?

最佳答案

以下应该有效:

myA[(myA > val).nonzero()[0][:2]] = 0

nonzero将返回 bool 数组 myA > val 非零的索引,例如正确

例如:

In [1]: myA = array([ 7,  4,  5,  8,  3, 10])

In [2]: myA[(myA > 5).nonzero()[0][:2]] = 0

In [3]: myA
Out[3]: array([ 0,  4,  5,  0,  3, 10])

关于python - 如何仅替换 numpy 数组中大于某个值的前 n 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016737/

相关文章:

c# - 代码性能 : SQL Server Query vs C#.Net web 应用程序

python - 优化嵌入式 Python 解释器的大小

python - 如何将 win32com Excel 工作表加载到 Pandas df?

java - 排除数组的索引 0 作为输出选项?

c++ - 在 For 循环中使用数组时重载 Cout 运算符? C++

java - 归并排序还是数据库?

python - 使用 python json.loads 解析 unicode 输入

python - Django:从查询集字典中获取一个键和值

python - 通过两个不同长度的数组和索引操作运行 for 循环

c# - 花时间运行程序