Как удалить записи массива numpy в зависимости от условий - PullRequest
0 голосов
/ 26 марта 2020

Я сейчас работаю над проблемой оптимизации и застрял в какой-то момент.

Вот простой случай: у меня есть набор 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...