沿轴按一次应用功能n项

Sum*_*ena 8 python numpy multidimensional-array

我正在寻找一种沿轴线应用n项功能的方法.例如

array([[ 1,  2], 
       [ 3,  4],
       [ 5,  6],
       [ 7,  8]])
Run Code Online (Sandbox Code Playgroud)

如果我sum一次在行中应用2个项目,我会得到:

array([[  4,   6], 
       [ 12,  14]])
Run Code Online (Sandbox Code Playgroud)

哪个是前sum2行和后2行.

注意:我正在处理更大的数组,我必须将该函数应用于n项,我可以在运行时决定.


数据沿不同的轴延伸.例如

array([[... [ 1,  2, ...], 
            [ 3,  4, ...],
            [ 5,  6, ...],
            [ 7,  8, ...],
            ...], ...])
Run Code Online (Sandbox Code Playgroud)

Ben*_*min 3

这是一个减少:

numpy.add.reduceat(a, [0,2])
>>> array([[ 4,  6],
           [12, 14]], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

只要“更大”意味着“y”轴更长,您就可以扩展:

a = numpy.array([[ 1,  2],
                 [ 3,  4],
                 [ 5,  6],
                 [ 7,  8],
                 [ 9, 10],
                 [11, 12]])
numpy.add.reduceat(a, [0,2,4])
>>> array([[ 4,  6],
           [12, 14],
           [20, 22]], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

编辑:实际上,这对于“两个维度都更大”也适用:

a = numpy.arange(24).reshape(6,4)
numpy.add.reduceat(a, [0,2,4])
>>> array([[ 4,  6,  8, 10],
           [20, 22, 24, 26],
           [36, 38, 40, 42]], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

我将让您自行调整索引以适应您的具体情况。

  • 在第一个轴 (y) 方向上,它表示添加范围的“开始”。例如:0:2、2:4、4:结束。在最后一个示例中: `a[4:,:]` 给出 `array([[16, 17, 18, 19], [20, 21, 22, 23]])`。 (2认同)