как изменить каждое значение в массиве с несколькими условиями - PullRequest
0 голосов
/ 30 сентября 2019

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

Теперь я пытаюсь найти способ сделать то же самое с двумя условиями.

 for j in range(5,45):
     # inter_data[(j*100) <= inter_data < ((j+1)*100)] = (j*100) + 50
     inter_data = np.where(((j + 1) * 100) > inter_data > (j * 100), (j * 100) + 50, inter_data)

я пытался использоватьта же техника, и она не работает. Кажется, что это может работать только с одним условием.

выдает следующую ошибку для двух условий

ValueError: Значение истинности массива с более чем одним элементом является неоднозначным. Используйте a.any () или a.all ()

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

вы можете использовать логические операции и операции &, чтобы сделать это, как показано ниже, используя векторизацию (без использования цикла Python)


import numpy as np
ar = np.arange(5,45)
inter_data = np.arange(100, 100+40*100, 100)


cond = (ar+1) * 100 > inter_data
cond &= (ar) * 100 < inter_data

np.where(cond, ar*100+50, inter_data)
1 голос
/ 30 сентября 2019

Попробуйте:

inter_data = np.where((((j + 1) * 100) > inter_data) & (inter_data > (j * 100)), (j * 100) + 50, inter_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...