gpt4 book ai didi

python - 一维数组上的 numpy apply_along_axis

转载 作者:行者123 更新时间:2023-11-28 21:49:59 24 4
gpt4 key购买 nike

当 numpy.apply_along_axis 将一维数组作为输入时会发生什么?当我在一维数组上使用它时,我看到了一些奇怪的东西:

y=array([1,2,3,4])

第一次尝试:

apply_along_axis(lambda x: x > 2, 0, y)
apply_along_axis(lambda x: x - 2, 0, y)

返回:

array([False, False,  True,  True], dtype=bool)
array([-1, 0, 1, 2])

但是当我尝试时:

apply_along_axis(lambda x: x - 2 if x > 2 else x, 0, y)

我得到一个错误:

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我当然可以使用列表理解然后转换回数组,但这看起来很复杂,我觉得在应用于一维数组时我遗漏了一些关于 apply_along_axis 的东西。

更新:根据 Jeff G 的回答,我的困惑源于这样一个事实,即对于只有一个轴的一维数组,传递给函数的实际上是一维数组本身,而不是单个元素。

“numpy.where”显然更适合我选择的示例(并且不需要 apply_along_axis),但我的问题实际上是关于将通用函数(采用一个标量并返回一个标量)应用于每个元素的正确习惯用法数组(除了列表理解),类似于 pandas.Series.apply(或 map )。我知道“矢量化”,但它似乎不亚于列表理解。

最佳答案

我不清楚您是在询问 y 是否必须是一维的(答案是否定的,它可以是多维的),还是在询问传递给 的函数应用_along_axis。对此,答案是肯定的:您传递的函数必须采用一维数组。 (这是明确说明 in the function's documentation )。

在您的三个示例中,xtype 始终是一维数组。您的前两个示例起作用的原因是因为 Python 隐式地广播 >- 沿该数组的运算符。

您的第三个示例失败了,因为在 if/else 的数组中没有这样的广播。要使其与 apply_along_axis 一起使用,您需要传递一个采用一维数组的函数。 numpy.where 适用于此:

>>> apply_along_axis(lambda x: numpy.where(x > 2, x - 2, x), 0, y)
array([1, 2, 1, 2])

附言在所有这些示例中,apply_along_axis 都是不必要的,多亏了广播。您可以通过这些获得相同的结果:

>>> y > 2
>>> y - 2
>>> numpy.where(y > 2, y - 2, y)

关于python - 一维数组上的 numpy apply_along_axis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com