[Numpy-discussion] fast duplicate of array

Keith Goodman kwgoodman@gmail....
Sat Jan 23 17:00:24 CST 2010


On Sat, Jan 23, 2010 at 2:31 PM, Alan G Isaac <aisaac@american.edu> wrote:
> On 1/23/2010 5:01 PM, Anne Archibald wrote:
>> If both arrays are "C contiguous", or more generally contiguous blocks
>> of memory with the same strided structure, you might get faster
>> copying by flattening them first, so that it can go in a single
>> memcpy().
>
> I may misuderstand this.  Did you just mean
> x.flat = y.flat
> ?
>
> If so, I find that to be *much* slower.
>
> Thanks,
> Alan
>
>
> x = np.random.random((1000,1000))
> y = x.copy()
> t0 = time.clock()
> for t in range(1000): x = y.copy()
> print(time.clock() - t0)
> t0 = time.clock()
> for t in range(1000): x[:,:] = y
> print(time.clock() - t0)
> t0 = time.clock()
> for t in range(1000): x.flat = y.flat
> print(time.clock() - t0)

I don't know what a view is, but it is fast:

x = y.view()

def speed():
    import numpy as np
    import time
    x = np.random.random((1000,1000))
    y = x.copy()
    t0 = time.clock()
    for t in range(1000): x = y.copy()
    print(time.clock() - t0)
    t0 = time.clock()
    for t in range(1000): x[:,:] = y
    print(time.clock() - t0)
    t0 = time.clock()
    for t in range(1000): x.flat = y.flat
    print(time.clock() - t0)
    t0 = time.clock()
    for t in range(1000): x = y.view()
    print(time.clock() - t0)

>> speed()
1.3
2.07
15.0
0.01


More information about the NumPy-Discussion mailing list