根据现有值

时间:2015-08-01 20:29:24

标签: python arrays numpy

我有numpy数组agent,其中包含'y'或'n'。我想用1替换'y',用0替换'n',并且在其他地方出现,我想要分配-1。我写的剧本是

agent[agent=='y']=1
agent[agent=='n']=0
agent[(agent!='y') and (agent!='n')]=-1
agent=agent.astype(int)

它给出了错误“具有多个元素的数组的真值是不明确的。使用a.any()或a.all()” 我知道我可以使用循环,但我希望以尽可能简单的方式在一行中完成此操作

3 个答案:

答案 0 :(得分:3)

为什么不首先创建一个-1的数组,然后根据代理

填充1和0
result = np.ones_like(agent, dtype=np.int) *-1
result [agent == 'y'] = 1
result [agent == 'n'] = 0

答案 1 :(得分:2)

首先,考虑到你的作业顺序,如果它有效,你的整个数组都会被-1填充。

话虽如此,你可以这样做:

agent[(agent != 0) & (agent != 1)] = -1

您还可以考虑使用masked array

答案 2 :(得分:0)

我建议创建一个转换函数f,它为'n'返回0,为'y'返回1,否则返回-1。 然后我会这样做: desired_array = [代理中的单元格的f(单元格)]