【问题标题】:How to apply a function along an axis in numpy?如何在numpy中沿轴应用函数?
【发布时间】: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])

标签: python numpy


【解决方案1】:

你不能完全随意地这样做,但你的特殊情况会减少到

x.sum(axis=2)

如果您想在代码中添加数组:

x[:, :, 0, :] + x[:, :, 1, :]

【讨论】:

  • 我的函数不是sum,只是为了简单
  • 这就是为什么我说你不能总是为任意函数做它。展示你真正想要的东西,我也许可以提供帮助。
  • @MadPhysicist 是正确的。很难知道如何帮助您了解该功能。一般来说,如果函数是一个 numpy ufunc,那么 np.foo.reduce 可能就是您要查找的内容,其中 foo 是普通函数的名称。
猜你喜欢
  • 2021-05-18
  • 2017-08-18
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多