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

标签 python numpy memory multiplication

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

相关文章:

python - 沿任意表面探针采样数据量

python - 为 Pandas 数据框分配 na 值不起作用

python - 如何从网格数组导出 x、y、z 坐标?

c - 如何更改存储在内存地址的值

android - 如何更正此错误 : java. lang.OutOfMemoryError

python - 使用多个工作表创建多个 Excel 文件

python - 如何在 Hg 中扩展另一个扩展的命令?

python - 用优雅的 Pandas 代码替换迭代

python - 奇怪的 numpy issubdtype 行为

php - 需要算法或 MySQL 查询建议