gpt4 book ai didi

python - 有没有一种简单的方法可以将函数应用于 numpy 数组的子集?

转载 作者:行者123 更新时间:2023-12-01 08:35:33 29 4
gpt4 key购买 nike

假设我有以下 numpy 数组

>>> import numpy as np
>>> arr = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [5,6,7,8]]])
>>> arr
array([[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[1, 2, 3, 4],
[5, 6, 7, 8]]])

我想将函数映射到数组的子部分,例如:

flip_sign = lambda x: x*(-1)

在我的示例中,我只想将此函数应用于第二行,产生:

array([[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[-1, -2, -3, -4],
[-5, -6, -7, -8]]])

本质上我想使用类似的东西

np.apply_along_axis(flip_sign, 1, arr)

但指定应应用此函数的沿轴 0 的索引(或索引范围)。

当然,我可以将数组拆分为子集,然后将函数应用于子集并再次连接子集。
但是是否有一个内置(numpy)函数可以轻松做到这一点?

最佳答案

如果您的函数足够简单,例如标量乘法或求和,您可以直接将其应用于数组的部分

import numpy as np

arr = np.array([[[1,2,3,4], [5,6,7,8]], [[1,2,3,4], [5,6,7,8]]])
flip_sign = lambda x: x*(-1)
arr[1] = flip_sign( arr[1])

输出:

[[[ 1  2  3  4]
[ 5 6 7 8]]

[[-1 -2 -3 -4]
[-5 -6 -7 -8]]]

这之所以有效,是因为 numpy 中实现 * + -/重载的方式。如果您使用标量对数组执行任何此类操作,它将自动对数组的每个元素执行该操作。

对于更复杂的函数np.apply_along_axes可以这样使用:

arr[1] = np.apply_along_axis( flip_sign, 0, arr[1])

关于python - 有没有一种简单的方法可以将函数应用于 numpy 数组的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53741196/

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