小编kso*_*yla的帖子

如何用if语句向量化numpy数组中的最大值?

我的设置:Python 2.7.4.1,Numpy MKL 1.7.1,Windows 7 x64,WinPython

语境:

我尝试实现Sequential Minimal Optimization算法来解决SVM.我使用最大违规对方法.

问题:

在工作集选择过程中,我想找到梯度的最大值及其满足某些条件的元素的索引,y [i]*alpha [i] <0或y [i]*alpha [i]

#y - array of -1 and 1
y=np.array([-1,1,1,1,-1,1])
#alpha- array of floats in range [0,C]
alpha=np.array([0.4,0.1,1.33,0,0.9,0])
#grad - array of floats
grad=np.array([-1,-1,-0.2,-0.4,0.4,0.2])


GMaxI=float('-inf')       
GMax_idx=-1        
n=alpha.shape[0] #usually n=100000
C=4
B=[0,0,C]
for i in xrange(0,n):
    yi=y[i]  #-1 or 1
    alpha_i=alpha[i]

    if (yi * alpha_i< B[yi+1]): # B[-1+1]=0 B[1+1]=C
        if( -yi*grad[i]>=GMaxI):
            GMaxI= -yi*grad[i]
            GMax_idx = i
Run Code Online (Sandbox Code Playgroud)

多次调用此过程(~50000),分析器显示这是瓶颈.可以对此代码进行矢量化吗?

编辑1:添加一些小的示例数据

编辑2:我已经检查过hwlau,larsmans和E先生提出的解决方案.只有解决方案提出E先生是正确的.以下示例代码包含所有三个答案:

import numpy as np
y=np.array([   -1,  -1, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy max vectorization

5
推荐指数
1
解决办法
1162
查看次数

标签 统计

arrays ×1

max ×1

numpy ×1

python ×1

vectorization ×1