如何在numpy数组中广播某些处理

时间:2016-01-22 22:11:55

标签: python numpy

我们说我有一个numpy数组

import numpy as  np
a = np.array([[1,2,3],[3,4,5]])

我定义了一个处理数据的函数,例如,得到一个向量的乘积:

def vp(v):
    p = 1
    for i in v:
        p = p * i
    return p

如何通过像列表的map函数那样容易地将函数广播到a中的所有向量,例如: vp(a)会给我[6, 60]? 如果a是3D甚至是4D阵列,有什么好方法可以播放这样的自定义函数呢?

1 个答案:

答案 0 :(得分:1)

我认为您的问题的核心依赖于创建自定义函数以应用于多维数据集。为此你可以使用numpy.apply_along_axis()。

a = array([[1, 2, 3],
       [3, 4, 5]])
np.apply_along_axis(arr = a, func1d=vp, axis=1)
> array([ 6, 60])

是的,这也适用于N维数据集。

c = array([[[ 1,  2],
        [ 3,  3],
        [ 4,  5]],

       [[16, 17],
        [18, 18],
        [19, 20]]])

np.apply_along_axis(vp, axis=1, arr=c)
> array([[  12,   30],
       [5472, 6120]])