Как получить размер возвращаемого значения функции без оценки функции - PullRequest
0 голосов
/ 23 апреля 2019

Предположим, я знаю, что функция f возвращает вектор неизвестной размерности.Функция возвращает значение вида: np.array(list). Можно ли получить размер возвращаемого значения без , не оценив функцию ?

Рассмотрим, например, эту функцию:

def f(x):
    f1 = x**2
    f2 = x
    return np.array([f1,f2]);

Я хочу что-то вроде: dim(f), который дает ответ 2.

Прямо сейчас я решаю проблему,оценивая функцию для случайного числа, а затем найдите измерение: len(f(np.random.rand())), но я хочу избежать оценки функции.

np отклоняется от курса numpy

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Это невозможно.Выходной размер функции зависит от входного, он не является статическим.Вы можете сами об этом рассуждать, в вашем примере выходной размер функции равен [2, *x.ndim].Конечно, если x - единственный скаляр, то размерность будет равна двум, но если x - это массив, размерность будет другой, и так далее.

Короче говоря, если вы знаете, что ваша функция всегда принимаетскаляр или другое значение со статическими размерами, просто поместите его выходное измерение в строку документа.Если вы берете аргументы, которые могут быть любым измерением, вы не сможете оценить функцию, чтобы определить размерность ее результата.

0 голосов
/ 23 апреля 2019

То, что сказал Коен Дерксен, правильно, нет способа определить размерность результата без оценки функции. Однако, если вы оцениваете функцию, вы должны использовать .shape свойство вместо len()

Например:

def f(x):
    f1 = x**2
    f2 = x
    return np.array([f1,f2]);

len = f(0).shape[0]

Также нет необходимости в генерации нового случайного числа для вызова функции, вы можете передать константу в качестве параметра, и результат будет таким же.

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