【发布时间】:2018-07-25 20:28:12
【问题描述】:
假设我想做一个函数,将输入向量乘以输入矩阵:
def MatMul(A,b):
return A.dot(b)
现在,我执行以下代码:
import numpy as np
A=np.array([[1,2,3],[4,5,6],[7,8,9]],dtype='float64')
b=np.array([4,5,6],dtype='float64')
c=np.zeros(3,dtype='float64')
c=MatMul(A,b)
MatMul 函数内部会有额外的数组分配吗?我知道A 和b 将通过引用传递。请注意,我已经预先分配了数组c。
一般来说,如何避免在这样的简单函数中进行不必要的预分配?说,我想执行几个数学运算:
def Rank1Update(A,b,alpha):
c=A.dot(b)
c+=alpha*c.dot(c)*c
return c
我可以在 1 行中拟合许多数学函数,但代码很快变得不可读。
我熟悉 C 风格的编程,为了避免不必要的内存分配,可以通过引用传递 A、b 和 c,并在返回 void 的函数中更新 c。我可以在 python 中做同样的事情,但为了方便和代码可读性,我想使用return,
谢谢,
米哈伊尔
【问题讨论】:
-
当你写
c=MatMul(A,b)时,c之前的值不可能对结果产生任何影响 - 函数无法知道要做什么及其返回值。
标签: python function numpy pass-by-reference