gpt4 book ai didi

python - Numpy 融合乘法和加法以避免浪费内存

转载 作者:太空狗 更新时间:2023-10-30 00:47:49 26 4
gpt4 key购买 nike

是否可以将两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com