Я пытаюсь определенным образом работать с двумя массивами в python. Допустим,
A = np.array([5, 10, 30, 50])
B = np.array([2, 3, 4, 5])
Теперь у меня есть целевой массив C = [2, 7, 15, 25, 40]
. Я хочу найти выходное значение (скажем, Y
) для каждого элемента в C
(скажем, x
) с условиями:
- Если
x < A[0]
, тогда Y = B[0]
- Если
A[i] < x < 2*A[i] < A[i+1]
или A[i] < x < A[i+1] < 2*A[i]
, то Y=x
- Если
A[i] < 2*A[i] < x < A[i+1]
, то Y = B[i+1]
- Если
x > A[end]
, то Y = x
i
- максимально возможный индекс, удовлетворяющий условиям
Итак, вывод становится Y = [2, 7, 15, 4, 40]
Это то, что у меня сейчас
A = np.array([5, 10, 30, 50])
B = np.array([2, 3, 4, 5])
C = np.array([2, 7, 15, 25, 40])
diffA = np.diff(A)
diffIdx = np.squeeze(np.where(diffA > A[0:len(A)-1]+1e-6))
Y = np.array([])
for x in C:
idx = np.searchsorted(A, x)
if idx == 0:
Y = np.append(Y, B[0])
elif np.any(diffIdx==idx-1) & (x>2*A[idx-1]+1e-6):
Y = np.append(Y, B[idx])
else:
Y = np.append(Y, x)
Это похоже на работу и я Python консоль %timeit
показывает, что это занимает 24.7 ms
, но мне было интересно, есть ли лучший или более быстрый способ сделать то же самое.