我正在编写在函数中进行矩阵运算的代码,并且我正在使用 numpy 数组来存储我的矩阵。通过阅读这里的书籍/讨论,我已经了解到函数的标量参数是按值传递的,而数组是以类似 C 的风格传递的(在 C 中,我们会说传递的是指向数组的指针,并且传递了一个等效的东西)发生在 Python 中)。
这里有两个简单的Python代码,第一个成功地将2个矩阵相乘并将矩阵传递回调用代码。我通过按照我在此处(或类似论坛)上看到的提示对矩阵乘法进行手动编码来实现这一点。在第二个中,我将手动编码的矩阵乘法替换为 c=np.dot(a,b) 并且矩阵乘积不会被传回。
如何使用第二种方法?
示例1:
import numpy as np
def my_func(a,b,c):
for i in range (0,2):
for j in range (0,2):
c[i,j]=0.
for k in range(0,2):
c[i,j]=c[i,j]+a[i,k]*b[k,j]
print("c")
print(c)
d = np.array([[1,2],[3,4]])
e = np.array([[-1,3],[2,-1]])
f = np.zeros((2,2))
my_func(d,e,f)
print("f")
print(f)
这是输出:
c
[[3. 1.]
[5. 5.]]
f
[[3. 1.]
[5. 5.]]
示例2:
import numpy as np
def my_func(a,b,c):
c=np.dot(a,b)
print("c")
print(c)
d = np.array([[1,2],[3,4]])
e = np.array([[-1,3],[2,-1]])
f = np.zeros((2,2))
my_func(d,e,f)
print("f")
print(f)
这是输出:
c
[[3 1]
[5 5]]
f
[[0. 0.]
[0. 0.]]
由于您没有就地修改数组,因此需要将其返回给调用者,并且调用者可以将返回值分配给变量。
import numpy as np
def my_func(a,b):
c=np.dot(a,b)
print("c")
return c
d = np.array([[1,2],[3,4]])
e = np.array([[-1,3],[2,-1]])
f = my_func(d,e)
print("f")
print(f)