2015-08-01 3 views
0

У меня есть массив numpy agent, который содержит 'y' или 'n'. Я хотел заменить «y» на 1 и «n» на 0 и где что-то еще присутствует. Nan. Я хочу назначить -1. Сценарий я написал былНазначение нового массива numpy в зависимости от существующих значений

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

Это дало ошибку «Значение истинности массива с более чем одним элементом является неоднозначным. Используйте a.any() или a.All()» Я понимаю, что я могу использовать циклы, но Я хочу сделать это в одной строке так же просто, как я могу

+0

'2 * (агент == 'y'). astype ('int') + (агент == 'n'). astype ('int') - 1' работает, но, вероятно, не очень хорошая идея :-) –

ответ

2

Прежде всего, учитывая порядок присвоений, который у вас есть, если он сработает, у вас будет весь массив, заполненный -1.

Это, как говорится, вы можете сделать:

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

Вы можете также рассмотреть возможность использования masked array.

0

Я бы рекомендовал создать функцию преобразования f, которая возвращает 0 для 'n', 1 для 'y' и -1 в противном случае. Тогда я хотел бы сделать: desired_array = [F (клеток) для ячейки в агента]

3

Почему бы не сделать первый массив из -1, а затем заполнить с 1 и 0 на основе агента

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

Хорошая идея. Это кажется более чистым, чем постепенное изменение содержимого массива с чем-то другого. –

Смежные вопросы