如何更改python代码以避免计算maxnumber索引
现在我已经实现了python代码如何更改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
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]保留上次迭代计算的值