gpt4 book ai didi

python - Numpy 将函数应用于数组中的每个项目

转载 作者:行者123 更新时间:2023-12-05 01:11:36 27 4
gpt4 key购买 nike

假设我有一个二维数组。如何将函数应用于数组中的每个项目并用返回替换该项目?另外,函数的返回值会是一个元组,所以数组会变成 3d。

这是记住的代码。

def filter_func(item):
if 0 <= item < 1:
return (1, 0, 1)
elif 1 <= item < 2:
return (2, 1, 1)
elif 2 <= item < 3:
return (5, 1, 4)
else:
return (4, 4, 4)

myarray = np.array([[2.5, 1.3], [0.4, -1.0]])

# Apply the function to an array

print(myarray)

# Should be array([[[5, 1, 4],
# [2, 1, 1]],
# [[1, 0, 1],
# [4, 4, 4]]])

任何想法我该怎么做?一种方法是执行 np.array(list(map(filter_func, myarray.reshape((12,))))).reshape((2, 2, 3)) 但这很慢,尤其是当我需要在形状数组 (1024, 1024) 上执行此操作时。

我也看到人们使用 np.vectorize,但它最终以 (array([[5, 2], [1, 4]]), array([[1, 1], [0, 4]]), array([[4, 1], [1, 4]])). 那么它的形状是(3, 2, 2)。

最佳答案

无需更改您的函数中的任何内容。

只需将函数的矢量化版本应用于数组并堆叠结果:

np.stack(np.vectorize(filter_func)(myarray), axis=2)

结果是:

array([[[5, 1, 4],
[2, 1, 1]],

[[1, 0, 1],
[4, 4, 4]]])

关于python - Numpy 将函数应用于数组中的每个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62864282/

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