Numpy优化

Numpy optimization

我有一个根据条件赋值的函数。我的数据集大小通常在 30-50k 范围内。我不确定这是否是使用 numpy 的正确方法,但是当它超过 5k 个数字时,它会变得非常慢。有没有更好的方法让它更快?

import numpy as np 
N = 5000; #dataset size
L = N/2;
d=0.1; constant = 5;

x=constant+d*np.random.random(N);

matrix = np.zeros([L,N]);

print "Assigning matrix"
for k in xrange(L):
    for i in xrange(k+1):
        matrix[k,i] = random.random()

    for i in xrange(k+1,N-k-1):
        if ( x[i] > x[i-k-1] ) and ( x[i] > x[i+k+1] ):
            matrix[k,i] = 0
        else:
            matrix[k,i] = random.random()

    for i in xrange(N-k-1,N):
        matrix[k,i] = random.random()

如果您使用 for 循环,您将失去 numpy 的速度。获得速度的方法是使用 numpys 函数和向量化操作。有没有一种方法可以创建随机矩阵:

matrix = np.random.randn(L,k+1)

然后对这个矩阵做些什么来得到你想要的 0 的位置?您能否详细说明将条目设置为0的条件?例如,您可以制作矩阵然后执行:

matrix[matrix > value]

保留所有高于阈值的值。如果条件可以表示为一些布尔索引器或算术运算,则可以加快速度。如果它必须在 for 循环中(即它取决于它周围的值作为循环周期)它可能无法被矢量化。