[Python] Passing array arguments back from Python functions

Discussão em 'Python' iniciado por Stack, Setembro 16, 2024.

  1. Stack

    Stack Membro Participativo

    I’m writing code which does matrix operations in functions and I’m using numpy arrays to store my matrices. From reading books/ discussions on here I have got as far as understanding that scalar arguments of functions are passed by value and arrays are passed in C-like style (in C we would say a pointer to the array is being passed and an equivalent thing is happening in Python).

    Here are two simple Python codes, the first successfully multiplies 2 matrices together and passes the matrix back to the calling code. I achieved this by hand-coding the matrix multiplication following a hint I saw on here (or a similar forum). In the 2nd I replace the hand-coded matrix multiplication by c=np.dot(a,b) and the matrix product doesn’t get passed back.

    How do I get the 2nd approach to work?

    Example 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)


    and here is the output:

    c
    [[3. 1.]
    [5. 5.]]
    f
    [[3. 1.]
    [5. 5.]]


    Example 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)


    and here is the output:

    c
    [[3 1]
    [5 5]]
    f
    [[0. 0.]
    [0. 0.]]

    Continue reading...

Compartilhe esta Página