首页 >后端开发 >Python教程 >在 NumPy 数组上映射函数的最有效方法是什么?

在 NumPy 数组上映射函数的最有效方法是什么?

Barbara Streisand
Barbara Streisand原创
2024-12-13 17:03:09667浏览

What's the Most Efficient Way to Map Functions Over NumPy Arrays?

探索 NumPy 中的高效数组映射

在本次讨论中,我们深入研究在 NumPy 数组上映射函数的最有效方法。一种常见的方法是利用列表理解,然后转换回 NumPy 数组:

import numpy as np 

x = np.array([1, 2, 3, 4, 5])
squarer = lambda t: t ** 2
squares = np.array([squarer(xi) for xi in x])

但是,由于中间 Python 列表的创建和转换,这种方法可能会表现出低效率。让我们探索可能提高性能的替代方法。

利用本机 NumPy 函数

如果目标函数已在 NumPy 中实现,则最好直接使用它,如下所示演示如下:

x ** 2

由于固有的优化,这种方法比其他方法要快得多NumPy 的原生函数。

向量化函数

当所需函数不是 NumPy 原生函数时,向量化是一种强大的技术,可以按元素应用函数数组。这可以使用以下方法来完成:

vf = np.vectorize(f)
vf(x)

此方法为向量化操作提供了高效的实现。

使用 fromiter()

fromiter()函数可用于创建一个迭代器,该迭代器根据提供的函数和数组生成元素值:

np.fromiter((f(xi) for xi in x), x.dtype)

此方法特别适合从迭代器生成自定义数组元素。

性能比较

经验测试显示显着的性能各种测绘方法之间的差异。如果该函数在 NumPy 中进行矢量化,则直接使用该函数在速度方面是无与伦比的。对于自定义函数,向量化或 fromiter() 通常比基于列表理解的方法具有显着优势。

结论

在 NumPy 数组上映射函数的最有效方法取决于具体的功能和数据特征。如果可能,强烈建议利用本机 NumPy 函数。矢量化和 fromiter() 为自定义函数提供了有效的替代方案。性能测试对于确定给定场景的最佳方法至关重要。

以上是在 NumPy 数组上映射函数的最有效方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn