Numpy数组:逐行和逐列操作



如果我想将函数按行(或按列)应用于narray,我是否要查找ufuncs(似乎不像)或某种类型的数组广播(不是我要找的?)?

编辑

我正在寻找类似R的应用函数。例如,

apply(X,1,function(x) x*2)

将通过一个匿名定义的函数乘以X的每一行,但也可以是一个命名函数。(这当然是一个愚蠢的、人为的例子,其中实际上不需要apply)。没有通用的方法可以跨NumPy数组的"轴"应用一个函数,

首先,许多numpy函数接受一个axis参数。用这种方法做你想做的事是可能的(而且更好)。

然而,一个通用的"按行应用这个函数"的方法看起来像这样:

import numpy as np
def rowwise(func):
    def new_func(array2d, **kwargs):
        # Run the function once to determine the size of the output
        val = func(array2d[0], **kwargs)
        output_array = np.zeros((array2d.shape[0], val.size), dtype=val.dtype)
        output_array[0] = val
        for i,row in enumerate(array2d[1:], start=1):
            output_array[i] = func(row, **kwargs)
        return output_array
    return new_func
@rowwise
def test(data):
    return np.cumsum(data)
x = np.arange(20).reshape((4,5))
print test(x)

请记住,我们可以做完全相同的事情:

np.cumsum(x, axis=1)

通常有比通用方法更好的方法,特别是对于numpy。

编辑:

我完全忘记了,但上面的内容本质上相当于numpy.apply_along_axis

所以,我们可以把它重写为:

import numpy as np
def test(row):
    return np.cumsum(row)
x = np.arange(20).reshape((4,5))
print np.apply_along_axis(test, 1, x)

相关内容

  • 没有找到相关文章

最新更新