假设我知道函数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
答案 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]
也不必为函数调用生成新的随机数,您可以传递一个常量作为参数,结果将是相同的。