如何在NumPy数组上映射一个函数

  • Post category:Python

要在NumPy数组上映射一个函数,可以使用NumPy库中的np.vectorize函数。np.vectorize是一个功能强大的函数,可以将任何函数作为输入,并为其返回一个接受任意数量输入的向量化函数。

具体步骤如下:

  1. 定义需要映射的函数。可以是任何以NumPy数组作为输入的函数,比如以下函数用于计算输入值的平方:
import numpy as np

def square(x):
    return x**2
  1. 创建NumPy数组。可以手动创建,也可以使用NumPy库中的实用函数来创建如np.arangenp.linspace
# 创建一维数组
x = np.arange(1, 6)
print(x)
# 输出:[1 2 3 4 5]

# 创建二维数组
y = np.linspace(1, 10, 10).reshape(2, 5)
print(y)
# 输出:
# [[ 1.   2.   3.   4.   5. ]
#  [ 6.   7.   8.   9.  10. ]]
  1. 使用np.vectorize函数将函数向量化,并应用于数组。
# 将square函数向量化
square_func = np.vectorize(square)

# 将向量化的函数应用于一维数组
x_squared = square_func(x)
print(x_squared)
# 输出:[ 1  4  9 16 25]

# 将向量化的函数应用于二维数组
y_squared = square_func(y)
print(y_squared)
# 输出:
# [[  1.     4.     9.    16.    25.  ]
#  [ 36.    49.    64.    81.   100.  ]]

以上就是在NumPy数组上映射一个函数的步骤。以下是另外两个示例:

  1. 将所有元素加上常数10。
import numpy as np

def add_ten(x):
    return x + 10

# 创建一维数组
x = np.array([1, 2, 3, 4, 5])

# 将add_ten函数向量化
add_ten_func = np.vectorize(add_ten)

# 将向量化的函数应用于一维数组
x_add_ten = add_ten_func(x)
print(x_add_ten)
# 输出:[11 12 13 14 15]
  1. 计算所有元素的sigmoid函数值。
import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 创建一维数组
x = np.array([1, 2, 3, 4, 5])

# 将sigmoid函数向量化
sigmoid_func = np.vectorize(sigmoid)

# 将向量化的函数应用于一维数组
x_sigmoid = sigmoid_func(x)
print(x_sigmoid)
# 输出:[0.73105858 0.88079708 0.95257413 0.98201379 0.99330715]