【问题标题】:Save result of multiplication to existing array将乘法结果保存到现有数组
【发布时间】:2015-08-01 09:42:02
【问题描述】:

考虑以下代码:

a = numpy.array([1,2,3,4])
b = numpy.array([5,6,7,8])
# here a new array (b*2) will be created and name 'a' will be assigned to it
a = b * 2 

那么,numpy 是否可以将b*2 的结果直接写入已经为a 分配的内存,而不分配新的数组?

【问题讨论】:

    标签: python arrays numpy multiplication


    【解决方案1】:

    是的,这是可能的 - 您需要使用 np.multiply 及其 out 参数:

    np.multiply(b, 2, out=a)
    

    数组a 现在被b * 2 的结果填充(并且没有分配新的内存来保存函数的输出)。

    NumPy 的所有 ufunc 都有 out 参数,这在处理大型数组时特别方便;通过允许重用数组,它有助于将内存消耗降至最低。唯一需要注意的是,数组必须具有正确的大小/形状才能保存函数的输出。

    【讨论】:

    • 但如果有更复杂的表达式,例如。 G。 b*2+c,我可以在不为时间结果引入数组的情况下对其进行评估:multiply(b,2,temp)add(temp,c,a)
    • @Leonidas:不幸的是,这是 NumPy 的限制之一,正如您在评论中所写的那样,操作必须分开。您可能对 numexpr 库感兴趣,它可以解决这个问题。
    • 谢谢。这是我的问题的答案:universal functions
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多