是否可以将两个 ndarray A 和 B 相乘并将结果添加到 C,而无需为 A 乘以 B 创建一个大的中间数组?
对于 C = A 乘以 B 的情况,Numpy 有 out 关键字参数:
numpy.multiply(A, B, out=C)
C += A 乘以 B 的情况怎么样?
最佳答案
Numpy 一次只支持一个操作。话虽如此,有几种解决方法。
就地操作
最简单的解决方案是通过 +=
和 *=
使用就地操作
import numpy as np
n = 100
b = 5.0
x = np.random.rand(n)
y = np.random.rand(n)
z = b * x
z += y
BLAS
您可以访问底层BLAS程序并手动应用它们。遗憾的是,没有乘加指令,但是有“AXPY”指令,它执行
y <- a * x + y
这可以通过以下方式调用:
import scipy
axpy = scipy.linalg.blas.get_blas_funcs('axpy', arrays=(x, y))
axpy(x, y, n, b)
数字表达式
另一种选择是使用像numexpr
这样的包。它允许您编译表达式:
import numexpr
z = numexpr.evaluate('b * x + y')
Theano
最近有几个机器学习包开始支持编译表达式,theano 就是其中之一。你可以这样做:
import theano
x = theano.tensor.vector() # declare variable
y = theano.tensor.vector() # declare variable
out = b * x + y # build symbolic expression
f = theano.function([x, y], out) # compile function
z = f(x, y)
关于python - Numpy 融合乘法和加法以避免浪费内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200278/