我有一个函数,它必须用f(x)来替换numpy数组X的每个元素x。如何修改一个numpy数组而不隐藏额外的内存分配?
def modify_inplace(X):
X = 2./(8. + numpy.exp(-X))
但是,这并不工作:
>>> X = numpy.random.random(size=(2,3))
>>> X
array([[ 0.97476386, 0.76411101, 0.37690288],
[ 0.05462798, 0.44722799, 0.23570353]])
>>>> modify_inplace(X)
>>> X
array([[ 0.97476386, 0.76411101, 0.37690288],
[ 0.05462798, 0.44722799, 0.23570353]])
我知道,我可以简单地返回新的数组,但我不知道是否有可能修改numpy的阵列就地所以没有额外的内存将被分配?
Ashwini Chaudhary在下面提供了一个解决方案,但这不是我正在寻找的,因为我需要在没有任何其他malloc的情况下修改数组。
谢谢。在你使用两个X的第二个例子中,有什么可以成为避免内存分配的另一种解决方案? – psihodelia 2014-11-01 11:49:03
@psihodelia在这种情况下,我只看到循环数组,计算表达式在一个临时变量中的答案,并替换旧的值...例如,可以在Cython中完成的例子 – 2014-11-01 23:54:52