【发布时间】:2021-10-13 06:56:07
【问题描述】:
例如,我有一个形状为的矩阵:
x = np.random.rand(3, 10, 2, 6)
如您所见,axis=2 沿线只有两个数组。
我有一个接受这两个数组的函数:
def f(arr1, arr2): # arr1 with shape (6, ) and arr2 with (6, )
return np.sum(arr1, arr2) # for simplicity
如何将这个函数沿第二个轴以矢量化方式应用于x 数组?这样生成的数组将具有 [3, 10, dim of output] 的形状。
我遇到了apply_along_axis 例程,但它要求f 只接受一维切片。
【问题讨论】:
-
f是否需要一对 2 或 3d 数组?f(x[:,:,0], x[:,:,1]?为了清楚起见,编写一个完全迭代的解决方案,迭代前 2 个维度(或更多根据需要)。顺便说一句,apply_along_axis,即使它有效,也只是一个便利工具;它不会提高性能。 -
@hpaulj
f期望接受一对一维数组。 -
一对——都来自
x?或来自x和另一个类似大小的数组?f( x[i,j,0], x[i,j,1])?或f( x[i,j,k]. y[i,j,k])?不,这真的很重要。我认为你需要同样的迭代。 -
@hpaulj 是的,确切地说,
f(x[i,j,0], x[i,j,1])