numpy python将带有两个参数的函数应用于矩阵的所有元素

vcirk6k6  于 2023-02-08  发布在  Python
关注(0)|答案(2)|浏览(131)

假设我有以下函数

def my_func(a,b):
    
    res = a[0] + a[1]*b
    
    return res

我知道如何把它应用到矩阵的一个元素上:

import numpy as np
mydata = np.matrix([[1, 2], [3, 4]])
my_par = np.array([1, 2])
res = my_func(my_par,mydata[1,1])

现在我想把它应用到矩阵mydata的所有元素上,我已经试过了

myfunc_vec = np.vectorize(my_func)
res = myfunc_vec(my_par,mydata)

出现以下错误:

in my_func
    res = a[0] + a[1]*b
IndexError: invalid index to scalar variable.

我认为这个错误是由于我向函数传递了两个参数。
有没有什么方法可以将我的函数应用到矩阵的所有元素而不出错?

6rqinv9w

6rqinv9w1#

我认为最简单的方法是使用for循环,并确保将np.matrix()替换为np.array()

def my_func(a,b):  
    res = a[0] + a[1]*b  
    return res

import numpy as np
mydata = np.array([[1, 2], [3, 4]])
my_par = np.array([1, 2])
res = my_func(my_par,mydata[1,1])
res = np.zeros((len(mydata), len(mydata[0])))
for i in range(len(mydata)):
   for j in range(len(mydata[0])):
      res[i][j] = my_func(my_par, mydata[i][j])

print(res)

输出:

[[3. 5.]
 [7. 9.]]

希望能有所帮助!

ndh0cuux

ndh0cuux2#

你不需要做任何事情。只要传递my_data而不是my_data[1,1],剩下的一切都会到位。

mydata = np.matrix([[1, 2], [3, 4]])
my_par = np.array([1, 2])
res = my_func(my_par,mydata)
print(res)

输出:

[[3 5]
 [7 9]]

相关问题