从 Python 函数传回数组参数

问题描述 投票:0回答:1

我正在编写在函数中进行矩阵运算的代码,并且我正在使用 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.]]
python function arguments
1个回答
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)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.