查看代码,
numpy.apply_along_axis我发现它只是遍历其他维度,将您的函数应用于每个“行”。还有一些额外的代码可以使尺寸约为2。但是对于2d
X,归结为:
result = np.empty_like(X)for i, x in enumerate(X): result[i] = func1d(x)
还有一些代码可以推断出
result应具有的形状。例如,如果
func1d为
np.sum,
result则将为1d,而不是输入的2d。
因此,此功能没有特殊的“效率”。多个输入的扩展可以是普通的Python zip:
result = np.empty_like(X) for i,(x,y) in enumerate(zip(X,Y)): result[i] = func1d(x,y)
np.ndindex是用于生成索引的便捷工具。值得看一下它的代码。它使用通用的numpy迭代器,
np.nditer请参见:http
:
//docs.scipy.org/doc/numpy/reference/arrays.nditer.html
例如,f可以采用3个形状为(2,2)的数组x,y,z;(3,); (5,)并产生形状(4,4)的结果。
我有形状(50,100,2,2)的X,Y,Z;(50,100,3); (50,100,5)并想要形状的结果(50,100,4,4)
for i,j in np.ndindex(50,100): result[i,j,:,:] = f(X[i,j,:,:], Y[i,j,:,:], Z[i,j,:,:])
“:”不是必需的,但要清楚地表明我们正在对其中两个维度进行索引,并对其余维度进行切片。如果要在第1维和第3维上进行迭代,然后对第2维切片,则需要使用它们。



