将函数应用于NumPy矩阵中的所有元素

时间:2018-11-18 03:28:21

标签: python python-3.x numpy matrix

假设我创建了一个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 解决方案。希望这会有所帮助!

2 个答案:

答案 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]])