Учитывая массив несортированных точек, мне нужно заменить их в заданном интервале.Самый простой способ, о котором я думаю, это
import numpy as np
def v1(array,inf,sup):
for i in range(len(array)):
if inf<array[i]<sup:
array[i]-=10
return array
Мне предложили использовать np.where
.Это работает гладко, если есть только одно логическое условие:
def v2(array,sup):
array[np.where(array < sup)[0]]-=10
return array
Но та же самая установка со значениями inf
и sup
, т.е.
array[np.where(inf < array < sup)[0]]-=10
вызовет ошибку
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all().
Мне нужно сделать что-то неуклюжее, например, дважды использовать np.where
с двумя условиями и пересекать два полученных массива индексов ...
def v2(array,inf,sup):
i=list(set.intersection(set(np.where(array>inf)[0]),set(np.where(array<sup)[0])))
array[i]-=10
return array
Предложения?