假设我创建了一个3x3 NumPy矩阵。将函数应用于矩阵中所有元素的最佳方法是什么,并且尽可能不遍历每个元素?
import numpy as np
def myFunction(x):
return (x * 2) + 3
myMatrix = np.matlib.zeros((4, 4))
# What is the best way to apply myFunction to each element in myMatrix?
编辑:如果该函数对矩阵友好,则当前提出的解决方案效果很好,但是如果这种函数仅处理标量,该怎么办?
def randomize():
x = random.randrange(0, 10)
if x < 5:
x = -1
return x
唯一的方法是遍历矩阵并将函数应用于矩阵内部的每个标量吗?我不是在寻找特定于 的解决方案(例如如何随机分配矩阵),而是在寻找一个在矩阵上应用函数的 general 解决方案。希望这会有所帮助!
答案 0 :(得分:0)
您可以使用:
myFunction(myMatrix)
答案 1 :(得分:0)
这显示了在不使用显式循环的情况下对整个Numpy数组进行数学运算的两种可能方法:
import numpy as np
# Make a simple array with unique elements
m = np.arange(12).reshape((4,3))
# Looks like:
# array([[ 0, 1, 2],
# [ 3, 4, 5],
# [ 6, 7, 8],
# [ 9, 10, 11]])
# Apply formula to all elements without loop
m = m*2 + 3
# Looks like:
# array([[ 3, 5, 7],
# [ 9, 11, 13],
# [15, 17, 19],
# [21, 23, 25]])
# Define a function
def f(x):
return (x*2) + 3
# Apply function to all elements
f(m)
# Looks like:
# array([[ 9, 13, 17],
# [21, 25, 29],
# [33, 37, 41],
# [45, 49, 53]])