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 循环中(即它取决于它周围的值作为循环周期)它可能无法被矢量化。
我有一个根据条件赋值的函数。我的数据集大小通常在 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 循环中(即它取决于它周围的值作为循环周期)它可能无法被矢量化。