+-
我能否获得一个numpy向量化函数以将缓冲区对象用作结果,而不是创建该对象返回的新数组?
我想做这样的事情:
fun = numpy.vectorize(lambda x: x + 1)
a = numpy.zeros((1, 10)
buf = numpy.zeros((1, 10)
fun(a, buf_obj = buf)
相对于
fun = numpy.vectorize(lambda x: x + 1)
a = numpy.zeros((1, 10)
buf = fun(a)
最佳答案
并非用于矢量化,但是大多数numpy函数采用的out参数完全可以满足您的需求.
您想与numpy.vectorize一起使用的功能是什么?当您尝试“向量化”计算时,向量化几乎总是错误的解决方案.
在上面的示例中,如果您想就地进行操作,则可以使用以下方法完成操作:
a = numpy.zeros((1, 10))
a += 1
或者,如果您想有点冗长,但要完全按照您的示例进行操作:
a = numpy.zeros((1, 10))
buf = numpy.empty_like(a)
numpy.add(a, 1, out=buf)
numpy.vectorize必须为数组中的每个元素调用python函数.因此,与在整个阵列上运行的numpy函数相比,它具有额外的开销.通常,当人们提到对表达式进行“向量化”以获得加速效果时,他们指的是从基本numpy函数的构建块中构建表达式,而不是使用向量化(这肯定会令人困惑……).
编辑:根据您的评论,矢量化确实适合您的用例! (编写“栅格计算器”是一个非常完美的用例,除了安全/沙盒问题之外.)
另一方面,如果您不介意其他依赖项,那么numexpr
可能更合适.
它更快,并带有out参数.
点击查看更多相关文章
转载注明原文:python-向量化的numpy函数可以使用缓冲区作为输出吗? - 乐贴网