Я пишу код, который выполняет матричные операции в функциях, и использую массивы numpy для хранения своих матриц. Читая книги/обсуждения здесь, я понял, что скалярные аргументы функций передаются по значению, а массивы передаются в стиле C (в C мы бы сказали, что передается указатель на массив и эквивалентная вещь). происходит в Python).
Вот два простых кода Python: первый успешно умножает две матрицы вместе и передает матрицу обратно в вызывающий код. Я добился этого, вручную запрограммировав умножение матриц, следуя подсказке, которую я видел здесь (или на аналогичном форуме). Во втором я заменяю закодированное вручную умножение матрицы на 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.]]
Подробнее здесь: https://stackoverflow.com/questions/789 ... -functions