简介
将函数映射到 NumPy 数组涉及将函数应用于每个元素获取包含结果的新数组。虽然问题中描述的使用列表理解和转换为 NumPy 数组的方法很简单,但它可能不是最有效的方法。本文探讨了在 NumPy 数组上高效映射函数的各种方法。
如果您希望应用的函数已经是矢量化 NumPy 函数,例如平方根或对数,请使用直接使用 NumPy 的原生函数是最快的选择。
import numpy as np x = np.array([1, 2, 3, 4, 5]) squares = np.square(x) # Fast and straightforward
对于 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 函数是映射函数的另一个选项,特别是在函数生成迭代器的情况下。但是,它的效率比数组理解稍低:
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中文网其他相关文章!