Python 在numpy数组的每一行上应用函数

Python 在numpy数组的每一行上应用函数,python,numpy,Python,Numpy,我有一个(16000000,5)numpy数组,我想在每一行上应用这个函数 def f(row): #returns a row of the same length. return [row[0]+0.5*row[1],row[2]+0.5*row[3],row[3]-0.5*row[2],row[4]-0.5*row[3],row[4]+1] 矢量化将运行缓慢 我试着这样走 np.column_stack((arr[:,0]+0.5*arr[:,1],arr[:,2]+0.5*ar

我有一个(16000000,5)numpy数组,我想在每一行上应用这个函数

def f(row):
#returns a row of the same length.
    return [row[0]+0.5*row[1],row[2]+0.5*row[3],row[3]-0.5*row[2],row[4]-0.5*row[3],row[4]+1]
矢量化将运行缓慢

我试着这样走

np.column_stack((arr[:,0]+0.5*arr[:,1],arr[:,2]+0.5*arr[:,3],arr[:,3]-0.5*arr[:,2],arr[:,4]-0.5*arr[:,3],arr[:,4]+1))
但我得到了内存错误


最快的方法是什么?

您最好预先分配并将操作拆分为单独的行,使用列堆栈在可读性或速度方面不会获得任何好处

In [104]: arr=np.random.rand(1000000,5)
In [105]: %timeit a=np.column_stack((arr[:,0]+0.5*arr[:,1],arr[:,2]+0.5*arr[:,3],arr[:,3]-0.5*arr[:,2],arr[:,4]-0.5*arr[:,3],arr[:,4]+1))
10 loops, best of 3: 86.3 ms per loop

In [106]: %timeit a2=map(f,arr)1 loops, best of 3: 10.2 s per loop


In [98]: a2=map(f,arr)

In [99]: %timeit a2=map(f,arr)
100 loops, best of 3: 10.5 ms per loop

In [100]: np.all(a==a2)
Out[100]: True
result = np.zeros_like(arr)
result[:, 0] = arr[:, 0] + .5 * arr[:, 1]
result[:, 1] = arr[:, 2] + .5 * arr[:, 3]
result[:, 2] = arr[:, 3] - .5 * arr[:, 2]
result[:, 3] = arr[:, 4] - .5 * arr[:, 3]
result[:, 4] = arr[:, 4] + 1

您最好预先分配操作并将其拆分为单独的行,使用column_stack在可读性或速度方面不会获得任何好处

result = np.zeros_like(arr)
result[:, 0] = arr[:, 0] + .5 * arr[:, 1]
result[:, 1] = arr[:, 2] + .5 * arr[:, 3]
result[:, 2] = arr[:, 3] - .5 * arr[:, 2]
result[:, 3] = arr[:, 4] - .5 * arr[:, 3]
result[:, 4] = arr[:, 4] + 1

这个可以处理16000000行吗?它应该,优点是它是一个
c
循环。这个可以处理16000000行吗?它应该,优点是它是一个
c
循环