python中的数组编码错误

时间:2014-01-16 10:01:15

标签: python arrays

我有一组值

y_train=["User","Bot","User","Bot",.......]
y_pred=["Bot","User","User","Bot".........]

如果y_train [i]和t_pred [i]的值不匹配,我想生成一个返回1的数组.y_train和y_pred包含相同的no值

那就是数组指标应该是:

indicator=[1,1,0,0..........] 

我试过了

 indicator=0
 for i in range(len(y_train)):
      if y_train[i]!=y_pred[i]:
            indicator[i]=1
      else:
            indicator[i]=0

但显示的错误是:

'int' object does not support item assignment

怎么可以这样做?感谢

4 个答案:

答案 0 :(得分:3)

indicator = map(lambda x,y: int(x != y), y_train, y_pred) 

如评论所述,如果indicator用作布尔数组,则可以移除int转换以生成True& False数组:

indicator = map(lambda x,y: x != y, y_train, y_pred) 

或根据评论中的建议:

indicator =  map(operator.ne, y_train, y_pred) 

答案 1 :(得分:2)

indicator = [t != p for t, p in zip(y_train, y_pred)]

答案 2 :(得分:1)

您已将指标声明为int。试试这个:

indicator=[]
for i in range(len(y_train)):
  if y_train[i]!=y_pred[i]:
        indicator.append(1)
  else:
        indicator.append(0)

另一种方法是:

indicator = []
for i,j in zip(y_train,y_pred):
    if i==j:
        indicator.append(0)
    else:
        indicator.append(1)

答案 3 :(得分:1)

首先,这是你应该做的事情:

indicator = [1 if x != y else 0 for x, y in zip(y_train, y_pred)]
# or indicator = [int(x != y) for x, y in zip(y_train, y_pred)]

这是列表理解。它使用zip并行查看y_trainy_pred的值。对于y_trainy_pred中的每对相应值,indicator如果值不相等则包含1,否则包含0

现在,这是你的尝试出了什么问题。首先,如果您希望indicator成为列表,请不要将其设为int:

#indicator=0
indicator = []

其次,您无法分配超出列表末尾的索引。您可以append代替值:

for i in range(len(y_train)):
    if y_train[i]!=y_pred[i]:
#         indicator[i]=1
          indicator.append(1)
    else:
#         indicator[i]=0
          indicator.append(0)