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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-26 09:55:10537浏览

What are the most efficient ways to map functions to NumPy arrays?

将函数映射到 NumPy 数组

简介

将函数映射到 NumPy 数组涉及将函数应用于每个元素获取包含结果的新数组。虽然问题中描述的使用列表理解和转换为 NumPy 数组的方法很简单,但它可能不是最有效的方法。本文探讨了在 NumPy 数组上高效映射函数的各种方法。

原生 NumPy 函数

如果您希望应用的函数已经是矢量化 NumPy 函数,例如平方根或对数,请使用直接使用 NumPy 的原生函数是最快的选择。

import numpy as np

x = np.array([1, 2, 3, 4, 5])
squares = np.square(x)  # Fast and straightforward

数组理解和Map

对于 NumPy 中未向量化的自定义函数,使用数组理解通常比使用传统循环更有效:

import numpy as np

def my_function(x):
    # Define your custom function

x = np.array([1, 2, 3, 4, 5])
squares = np.array([my_function(xi) for xi in x])  # Reasonably efficient

也可以使用 map 函数,尽管它效率比数组稍低理解:

import numpy as np

def my_function(x):
    # Define your custom function

x = np.array([1, 2, 3, 4, 5])
squares = np.array(list(map(my_function, x)))  # Slightly less efficient

np.fromiter

np.fromiter 函数是映射函数的另一个选项,特别是在函数生成迭代器的情况下。但是,它的效率比数组理解稍低:

import numpy as np

def my_function(x):
    # Define your custom function
    return iter([my_function(xi) for xi in x])  # Yields values as an iterator

x = np.array([1, 2, 3, 4, 5])
squares = np.fromiter(my_function(x), x.dtype)  # Less efficient, but works with iterators

向量化

在某些情况下,可以使用 NumPy 的向量化框架对自定义函数进行向量化。这种方法涉及创建一个可以按元素应用于数组的新函数:

import numpy as np

def my_function(x):
    # Define your custom function

x = np.array([1, 2, 3, 4, 5])
my_vectorized_function = np.vectorize(my_function)
squares = my_vectorized_function(x)  # Most efficient, but may not always be possible

性能注意事项

方法的选择取决于数组大小等因素,函数的复杂性,以及 NumPy 是否提供函数的向量化版本。对于小型数组和简单函数,数组理解或映射可能就足够了。对于更大的数组或更复杂的函数,建议使用原生 NumPy 函数或向量化以获得最佳效率。

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

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