Возвращение массива значений отображения данных в параметры в Python - PullRequest
0 голосов
/ 13 ноября 2009

У меня есть несколько функций, которые возвращают массив данных, соответствующих диапазонам параметров.

Пример: для двумерного массива a значение a_{ij} соответствует набору параметров (param1_i, param2_j). Как вернуть результат и сохранить соответствие параметра-значения?

  • Вызов функции для каждого из param1_i, para2_j и возврат одного значения займет много времени (гораздо эффективнее, если вы сделаете это за один раз)
  • Разбить функцию на (множество) меньших функций и затруднить ее использование? (смысл в том, чтобы получить значения для диапазона параметров, 1 значение совершенно бесполезно)

Лучшее, что я могу придумать, это создать новый тип dumpy, например, для двумерного массива:

tagged2d = np.dtype( [('vals', float, 1), ('params', float, (2,))] )

, чтобы a['vals'][i,j] содержал значения, а a['params'][i,j] соответствующие параметры.

Есть мысли? Может мне просто вернуть 2 массива, один со значениями, другой с кортежами параметров?

1 Ответ

2 голосов
/ 13 ноября 2009

Я рекомендую ваше последнее предложение ... просто верните два массива {'values': a, 'params':params}.

Есть несколько причин для этого.

  1. Прежде всего, ваше другое решение (с использованием dtype и recarrays) объединяет слишком много вещей. Например, как насчет величин, полученных из a, которые соответствуют одним и тем же параметрам ... вы делаете новый повторный массив и новую копию параметров для этого? Даже что-то такое простое, как 2*a, чтобы стать заметным количеством, потребует от вас принятия трудных решений.

  2. У речевых массивов есть ограничения, и это так легко решить другими способами, что не стоит принимать эти ограничения.

Если вы хотите более легкую взаимосвязь между возвращаемыми терминами, вы можете поместить элементы в класс . Например, у вас может быть метод, который принимает пару параметров и возвращает соответствующий результат. Таким образом, вы не будете ограничены повторным массивом, и вы все равно можете построить любые удобные отношения между ними, которые вам нравятся, и легко внести обратно совместимые изменения в поведение и т. Д.

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