>> On Mon, 28 Jul 2008, Robert Kern apparently wrote:
>>> Unfortunately, a temporary is unavoidable. If you modify `a` in-place,
>>> you will mess up the computation. For example, we could try using the
>>> third argument to the subtract() ufunc to place the results back into
>>> a[1:]:
>>> In [1]: import numpy
>>> In [2]: a = numpy.arange(1,7)
>>> In [3]: numpy.subtract(a[1:], a[:-1], a[1:])
>>> Out[3]: array([1, 2, 2, 3, 3])
> 2008/7/28 Alan G Isaac <aisaac@american.edu>:
>> But he could work from the other end::
>> >>> np.subtract(a[1:],a[:-1],a[:-1])
>> array([1, 1, 1, 1, 1])
>> As long as he can then use a[:-1] instead of a[1:].
>> Right?
Anne Archibald wrote:
> Maybe. The result is dependent on the memory layout of a.
What would be the right test for this being ok?
And would you give an example where this will fail?
I assumed the implicit loop would always be over the
elements in the order they appear in the array.
E.g., ::
>>> a = np.arange(20)
>>> a2 = a[::-2]
>>> a2.flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>> np.subtract(a2[1:],a2[:-1],a2[:-1])
array([-2, -2, -2, -2, -2, -2, -2, -2, -2])
>>> a2
array([-2, -2, -2, -2, -2, -2, -2, -2, -2, 1])
Thanks,
Alan