У меня есть два пустых массива одинаковой формы: dat_ara
и ref_ara
.
Я хотел бы выполнить операцию op_func
на axis = -1
из dat_ara
, однако я хотел бы толькодля работы с выбранным срезом значений в каждом массиве срез задается, когда пороговое значение thres
пересекается с эталонным массивом ref_ara
.
Для иллюстрации в простом случае, когда массивыпросто 2-dim, у меня есть:
thres = 4
op_func = np.average
ref_ara = array([[1, 2, 1, 4, 3, 5, 1, 5, 2, 5],
[1, 2, 2, 1, 1, 1, 2, 7, 5, 8],
[2, 3, 2, 5, 1, 6, 5, 2, 7, 3]])
dat_ara = array([[1, 0, 0, 1, 1, 1, 1, 0, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 1, 0],
[1, 0, 1, 1, 1, 1, 0, 1, 1, 1]])
Мы видим, что thres
нарушен в 5-м, 7-м и 3-м индексе 1-го, 2-го и 3-го массива в axis=0
из ref_ara
. Поэтому желаемый результат будет
out_ara = array([op_func(array([1, 0, 0, 1, 1, 1]),
op_func(array([1, 1, 1, 1, 1, 1, 1, 0]),
op_func(array([1, 0, 1, 1])])
Эта проблема трудна, поскольку требует ссылки на ref_ara
. Если бы это было не так, я мог бы просто использовать numpy.apply_along_axis
.
Я попытался расширить размеры двух массивов, чтобы связать их для вычисления, то есть:
assos_ara = np.append(np.expand_dims(dat_ara, axis=-1), np.expand_dims(ref_ara, axis=-1), axis=-1)
Ноопять же, numpy.apply_along_axis
требует, чтобы функция ввода работала только с 1-мерными массивами, и, таким образом, я все еще не могу использовать эту функцию.
Единственный другой способ, который я знаю, это перебирать индексы массивов, однако,с массивами, имеющими постоянные изменяющиеся размеры двух массивов, это сложный вопрос, более того, он неэффективен в вычислительном отношении.
Я бы очень хотел использовать векторизованные функции, чтобы помочь этому процессу. Какой самый эффективный способ это сделать?