Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改python代码以避免计算maxnumber索引_Python_Numpy - Fatal编程技术网

如何更改python代码以避免计算maxnumber索引

如何更改python代码以避免计算maxnumber索引,python,numpy,Python,Numpy,现在我已经实现了python代码 def logistic(z): return 1.0 / (1.0 + np.exp(-z)) def gradient_testing(X,Y,w): K = len(w) N = len(X) s = np.zeros(K) for i in range(N): s += Y[i] * X[i] * logistic(-Y[i] * np.dot(X[i], w)) s = -1 *s/N

现在我已经实现了python代码

def logistic(z):
    return 1.0 / (1.0 + np.exp(-z))
def gradient_testing(X,Y,w):
   K = len(w)
   N = len(X)
   s = np.zeros(K)

   for i in range(N):
         s += Y[i] * X[i] * logistic(-Y[i] * np.dot(X[i], w))

   s = -1 *s/N
   return s
X是80*23矩阵,w是1*23矩阵,Y是80*1矩阵。根据我的代码,每次迭代后它都会返回1*23。但它不满足我的要求

在第一次迭代中,它将返回1*23的值,然后我将选择最大的一个,例如,它是s[8]。并且当前迭代s[8]不会从Y[i]*X[i]*logistic-Y[i]*np.dotX[i],w更新。在这个迭代中,如果Y[i]*X[i]*logistic-Y[i]*np.dotX[i]中的第8个元素w是最大的,那么在下一个迭代中s[9]将不会被更新。如何更改代码?

简要说明,k_范围=max_idx使数组具有:1,其中索引不等于上一个最大值的索引;0,其中索引等于上一个最大值的索引。在第一次迭代中,max_idx是-1,所以k_范围=max_idx给出了一个1的数组

def gradient_testing(X,Y,w):
    K = len(w)
    N = len(X)
    s = np.zeros(K)
    max_idx=-1
    k_range=np.arange(K)

    for i in range(N):
        _temp_max= Y[i] * X[i] * logistic(-Y[i] * np.dot(X[i], w))
        s+=_temp_max*(k_range!=max_idx)
        max_idx=np.argmax(_temp_max)

    s = -1 *s/N
    return s

X和Y的长度相同吗?不完全理解你的问题。如果在当前迭代中s[8]是最大值,那么在下一次迭代中,您希望得到s[0],s[1],s[2]…s[7],0,s[9]…,而不需要s[8]?是的,s[8]保留上次迭代计算的值