これは私がコードを実行するとき、私は知らないpython3 TypeError: 'function' object is not iterableオブジェクト指向: 'NoneType'オブジェクトは反復可能ではありません。どうして?
ので、それは
w,c= PRank.Prank(c,w,X[i,:],Y[i])
はTypeError言う反復可能でない機能についての再発話題です。「NoneType」オブジェクトが反復可能ではありません。ここでのコードです。
import numpy as np
class PRank:
def predict(X,w,c):
rank = min(np.where(np.dot(X,w)-c<0)[0])
return(rank)
def Prank (c,w,x_t,y):
l_t=np.zeros(len(c)-1)
a_t=np.zeros(len(c)-1)
y_t =min(np.where((np.dot(w,x_t)-c) < 0)[0])
if y_t != y:
for r in range(len(c)-1):
if (y <= r):
l_t[r] = -1
else:
l_t[r] = 1
for r in range(len(c)-1):
if (((np.dot(w,x_t)-c[r])*l_t[r]) <= 0):
a_t[r] = l_t[r]
else:
a_t[r] = 0
w = w + sum(a_t)*x_t
c_ = np.delete(c,len(c)-1)
c_ = c_ - a_t
c = np.append(c_,np.inf)
else:
w = w
c = c
def modelPRank(X,Y,maxrank=5,epsilon=0.02):
N=np.shape(X)[0]
feat=np.shape(X)[1]
c=np.sort(np.random.uniform(size=(maxrank+1,1)),axis=0)
c[0]=-np.inf
c[-1]=np.inf
w=np.zeros(feat)
ypred=np.zeros(N)
MSE=1
j=0
while MSE > epsilon:
for i in range(np.shape(X)[0]):
w,c= PRank.Prank(c,w,X[i,:],Y[i])
for i in range(np.shape(X)[0]):
ypred[i]=min(np.where(np. dot(X[i,:],w)-c<0)[0])
MSE=np.nanmean((ypred-Y)**2)
print(MSE)
j=j+1
return[MSE,w,ypred,c]
X=np.random.uniform(1,5,(5000,2))
Wini=[0.35,0.65]
Y=np.round(np.dot(X,Wini))
PRank.modelPRank(X,Y)
私がクラスを使用しない場合、コードはうまくいきます。なぜいたずらは反復可能ではないと私はそれを修正することができますと言う私は知らない。
何かを返そうとしましたか? –
お願いしますか? –
エラーがどこで失敗したかを示す行は表示されませんか? – MCBama