【发布时间】:2011-12-07 02:58:24
【问题描述】:
如果我想将函数按行(或按列)应用到 ndarray,我会寻找 ufuncs(看起来不像)还是某种类型的数组广播(不是我想要的要么?)?
编辑
我正在寻找类似 R 的应用功能的东西。例如,
apply(X,1,function(x) x*2)
将通过匿名定义的函数将 X 的每一行乘以 2,但也可以是命名函数。 (这当然是一个愚蠢的、人为的例子,实际上并不需要apply)。没有通用的方法可以跨 NumPy 数组的“轴”应用函数,?
【问题讨论】:
-
更容易谈论细节。你想做什么?通用的“逐行应用此函数”解决方案实际上只是一个 for 循环(迭代行或列真的很容易)。通常有更有效的方法。
-
R 的
apply的等价物是numpy.vectorize的价值。但是,使用它几乎总是一个坏主意……我从未见过可以使用vectorize的情况,在这种情况下,您无法重写函数以直接对 ND 数组进行操作。 (它很可能不如 R 的apply灵活。我只玩过R,从未真正深入使用过它。)在你的例子中,你只需要写result = X * 2。 -
有趣——实际上 R 也有一个矢量化函数——但要沿“轴”应用它,我必须将数组拆分为行向量列表或其他东西......但是感谢您的一般性讨论。我可能会坚持循环,因为它看起来更“普遍”。 (在 R 中,在这种情况下你也可以只做
X*2,这就是为什么我说这很愚蠢:)。 -
啊!抱歉,我只是假设 R 的
apply有点不同。您可以使 numpy 的vectorize对行进行操作(您将数组视为结构化数组,然后每个元素都是一个向量),但这比它的价值更麻烦(通常不会比行上的 for 循环快) . -
“然后每个元素都是一个向量”的意思是,每一行都是一个元组?它会缩短代码,但不太通用,因为它只适用于行......但有趣的想法!
标签: python arrays numpy multidimensional-array