如何在不评估函数的情况下获取函数返回值的维数

时间:2019-04-23 12:02:38

标签: python function

假设我知道函数print(movies[4]) # ["Graham Chapman", ["Michael Palin", "John Cleese", "Terry Gilliam", "Eric Idle", "Terry Jones"]] print(movies[4][1]) # ['Michael Palin', 'John Cleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones'] print(movies[4][1][3]) # Eric Idle 返回一个未知维的向量。该函数返回以下形式的值:f是否可以在不评估函数的情况下获得返回值的维度

例如考虑以下功能:

np.array(list)

我想要一些类似的东西:def f(x): f1 = x**2 f2 = x return np.array([f1,f2]); 给出答案2。

现在,我通过为随机数求值函数来解决该问题,然后找到维:dim(f) 但我想避免对该函数求值。

len(f(np.random.rand()))偏离了路线np

2 个答案:

答案 0 :(得分:1)

这是不可能的。函数的输出尺寸取决于其输入的尺寸,它不是静态的。您可以自己进行推理,在您的示例中,函数的输出维度为[2, *x.ndim]。当然,如果x是一个标量,则维数将是2,但是如果x是一个数组,则维数将是不同的,等等。

简而言之,如果您知道函数始终使用标量或其他具有静态维的值,则只需将其输出维放在doc字符串中即可。如果您接受的参数可以是任意维度,则将无法评估函数以找出结果的维度。

答案 1 :(得分:0)

Koen Dercksen所说的是正确的,没有评估函数就无法确定结果的维数。但是,如果您评估函数,则应使用.shape property而不是len()

例如:

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

len = f(0).shape[0]

也不必为函数调用生成新的随机数,您可以传递一个常量作为参数,结果将是相同的。