[Numpy-discussion] question about in-place operations

Massimo Di Pierro massimo.dipierro at gmail.com
Tue May 22 15:07:10 EDT 2012


Thank you Dag,

I will look into it. Is there any documentation about ufunc?
Is this the file core/src/umath/ufunc_object.c

Massimo


On May 22, 2012, at 1:47 PM, Dag Sverre Seljebotn wrote:

> On 05/22/2012 04:54 PM, Massimo DiPierro wrote:
>> For now I will be doing this:
>>
>> import numpy
>> import time
>>
>> a=numpy.zeros(2000000)
>> b=numpy.zeros(2000000)
>> c=1.0
>>
>> # naive solution
>> t0 = time.time()
>> for i in xrange(len(a)):
>>     a[i] += c*b[i]
>> print time.time()-t0
>>
>> # possible solution
>> n=100000
>> t0 = time.time()
>> for i in xrange(0,len(a),n):
>>     a[i:i+n] += c*b[i:i+n]
>> print time.time()-t0
>>
>> the second "possible" solution appears 1000x faster then the former  
>> in my tests and uses little extra memory. It is only 2x slower than  
>> b*=c.
>>
>> Any reason not to do it?
>
> No, this is perfectly fine, you just manually did what numexpr does.
>
>
> On 05/22/2012 04:47 PM, Massimo DiPierro wrote:
>> Thank you. I will look into numexpr.
>>
>> Anyway, I do not need arbitrary expressions. If there were  
>> something like
>>
>> numpy.add_scaled(a,scale,b)
>>
>> with support for scale in int, float, complex, this would be
> sufficient for me.
>
> But of course, few needs *arbitrary* expressions -- it's just that the
> ones they want are not already compiled.
>
> It's the last 5% functionality that's different for everybody...
>
> (But the example you mention could make a nice ufunc; so an  
> alternative
> for you would be to look at the C implementation of np.add and try to
> submit a pull request for numpy.add_scaled)
>
> Dag
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion




More information about the NumPy-Discussion mailing list