Я сейчас работаю над проблемой оптимизации и застрял в какой-то момент.
Вот простой случай: у меня есть набор p
параметров в c
комбинациях и я пытаюсь оптимизировать их на i
входах. Это приводит к массиву numpy формы (p, c, i)
. Для каждого из них я вычисляю ошибку, ведущую ко второму массиву формы (c, i)
. Теперь мне нужно избавиться от некоторых комбинаций перед запуском следующей итерации.
Для случая i = 1
я использую следующий код, который отлично работает (массивы просто (p, c)
и (c, )
):
ensemble = np.vstack((ensemble, error))
# Remove some functions that do not fit
ensemble = ensemble[:, ensemble[p, :] < thres]
# Delete error column
function_ensemble = np.delete(function_ensemble, p, axis=0)
Теперь я пытаюсь обобщить это для i > 1
:
error[error >= 0.015] = 0
error = error[np.newaxis, :, :]
# Maybe keep them seperate
ensemble = np.concatenate((ensemble, error))
И вот где я застрял. То, о чем я сейчас думаю, это отсортировать ensemble
по error
и удалить все записи, где ошибка 0
для всех i
. Так что ensemble
становится меньше. Однако, насколько я знаю, np.sort
здесь не работает. Может быть, я мог бы использовать структурированные массивы, но я не уверен, может ли это уничтожить код в других местах.
У кого-нибудь есть идеи по моей проблеме?
Редактировать
Для случая i=1
рабочий пример с p=3
и c=100
может быть просто:
error = np.random.rand(100)
ensemble = np.ones([3, 100])
ensemble = np.vstack((ensemble, error))
ensemble = ensemble[:, ensemble[3, :] < 0.5]
ensemble = np.delete(ensemble, 3, axis=0)
Результатом в этом случае является подмножество моего ансамбля, где ошибка меньше 0,5.
Для случая i=2
(несколько ансамблей) пример с p=3
и c=100
может быть:
error = np.random.rand(100, 2)
ensemble = np.ones([3, 100, 2])
error[error >= 0.015] = 0
error = error[np.newaxis, :, :]
ensemble = np.concatenate((ensemble, error))
Опять же, я хочу подмножество мои ансамбли, содержащие все наборы параметров с ошибкой <0,5. Это потребует некоторого дополнения, поскольку каждый ансамбль <code>i будет иметь разный размер. Однако конечной целью является итерация и корректировка параметров, пока не останется только один набор с массивом размером (3,1,2)
. (Примеры выше не показывают итерацию).
Best, Julz