小编Pet*_*ter的帖子

运行最大numpy数组值

我需要一种快速的方法来保持一个numpy数组的运行最大值.例如,如果我的数组是:

x = numpy.array([11,12,13,20,19,18,17,18,23,21])
Run Code Online (Sandbox Code Playgroud)

我想要:

numpy.array([11,12,13,20,20,20,20,20,23,23])
Run Code Online (Sandbox Code Playgroud)

显然我可以通过一个小循环来做到这一点:

def running_max(x):
    result = [x[0]]
    for val in x:
        if val > result[-1]:
            result.append(val)
        else:
            result.append(result[-1])
    return result
Run Code Online (Sandbox Code Playgroud)

但我的阵列有数十万个条目,我需要多次调用它.似乎必须有一个笨拙的技巧来删除循环,但我似乎找不到任何可行的东西.另一种方法是将其写为C扩展,但似乎我要重新发明轮子.

python numpy

30
推荐指数
1
解决办法
9251
查看次数

比较两个不同长度的numpy数组

我需要在另一个数组中找到第一个小于或等于一个数组元素的索引.一种有效的方法是:

import numpy
a = numpy.array([10,7,2,0])
b = numpy.array([10,9,8,7,6,5,4,3,2,1])
indices = [numpy.where(a<=x)[0][0] for x in b]
Run Code Online (Sandbox Code Playgroud)

索引的值为[0,1,1,1,2,2,2,2,3,3],这正是我所需要的.问题当然是python"for"循环很慢,我的数组可能有数百万个元素.这有什么不好的伎俩吗?这不起作用,因为它们的数组长度不同:

indices = numpy.where(a<=b) #XXX: raises an exception
Run Code Online (Sandbox Code Playgroud)

谢谢!

python numpy

7
推荐指数
2
解决办法
6804
查看次数

填写可变数量的

用未知(编译时)数量的变量填充变量的最佳方法是什么?例如,让我们说:

int n = 5;
int b = fillwithones(5);
Run Code Online (Sandbox Code Playgroud)

现在b包含11111(二进制).

我不能只是硬编码int b = 31因为n未提前知道(在我的应用程序中).

我可以这样做:

int b = pow(2, n) - 1
Run Code Online (Sandbox Code Playgroud)

但使用战俘似乎非常浪费.

谢谢!

c bit-manipulation bitwise-operators

3
推荐指数
1
解决办法
1897
查看次数

标签 统计

numpy ×2

python ×2

bit-manipulation ×1

bitwise-operators ×1

c ×1