我有一组值
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
怎么可以这样做?感谢
答案 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_train
和y_pred
的值。对于y_train
和y_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)