Python:使用Pythonnp.沿_轴应用函数返回数组

2024-09-27 17:53:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着做如下的事情

import numpy as np
arr = np.array([0,1,2,3])
fn = lambda x: np.array([x/2,x*2])
res = np.apply_along_axis(fn,0,arr)

也就是说,我希望将np.apply_along_axis与返回数组而不是单个值的函数一起使用。但是,这会导致以下错误。在

^{pr2}$

我希望结果相当于:

res = np.array([[0.0,0],[0.5,2],[1.0,4],[1.5,6]])

注意,我的实际用例比给定的fn更复杂。我想知道是否有一种方法可以将np.apply_along_axis与返回数组的函数一起使用,或者是否有一种不同的(numpythonic)方法来实现相同的功能。在

谢谢!在


Tags: 方法函数importnumpyasnpres数组
2条回答

这种在数组中应用常规Python函数的方法与for循环基本相同。即使使用NumPy函数调用函数,也不会很快。所以保持简单:

arr = np.array([0,1,2,3])
fn = lambda x: [x/2,x*2]
res = np.array(list(map(fn, arr)))

或者,如果你关心性能:

^{pr2}$

第二种方法要快得多,只要数组中的行数多于要应用的函数数。这是因为您只循环几次,使用NumPy矢量化代码将每个函数一次性应用于整个输入,而不是逐个循环输入行。在

我发现的一个解决方法是对结果进行叠加,使lambda返回1D数组而不是2D数组:

arr = np.array([0, 1, 2, 3])
fn = lambda x: np.hstack([x/2, x*2])
res = np.apply_along_axis(fn, 0, arr)

然后您可以根据需要重塑res

相关问题 更多 >

    热门问题