> From: Eric Firing [mailto:efir...@hawaii.edu] 
> Sent: Wednesday, June 06, 2012 13:41
> To: matplotlib-users@lists.sourceforge.net
> Subject: Re: [Matplotlib-users] scatter plot with constant x
> 
> On 06/06/2012 06:42 AM, Ethan Gutmann wrote:
> >> ...
> >> No, but you can do this:
> >>
> >> plt.plot([3] * 4, [60, 80, 120, 180], ...)
> >
> > This started from a simple enough question, but it got me 
> thinking about what the fastest way to do this is (in case 
> you have HUGE arrays, or many loops over them).

[...]

> Since we end up needing float64 anyway:
> 
> In [3]: %timeit l=np.empty(10000,dtype=np.float64); l.fill(3)
> 100000 loops, best of 3: 14.1 us per loop
> 
> In [4]: %timeit l=np.zeros(10000,dtype=np.float64);l[:]=3
> 10000 loops, best of 3: 26.6 us per loop
> 
> Eric

Numpy's as_strided came to mind; it can make a large array that's really a
view of a one-element array:

    In [1]: as_strided = np.lib.stride_tricks.as_strided

    In [2]: s = as_strided(np.array([3], dtype=np.float64), shape=(10000,),
       ...: strides=(0,))

    In [3]: s[0] = 4

    In [4]: s[9999]  # all elements share data
    Out[4]: 4.0

It's somewhat slower to create the base array and the view than to create and
fill a 10000-element array:

    In [5]: %timeit l = np.empty(10000, dtype=np.float64); l.fill(3)
    100000 loops, best of 3: 10.1 us per loop

    In [6]: %timeit s = as_strided(np.array([3], dtype=np.float64), 
    shape=(10000,), strides=(0,))  # line broken for email
    10000 loops, best of 3: 21.6 us per loop

However, once created, its contents may be changed much more quickly:

    In [7]: l = np.empty(10000, dtype=np.float64)

    In [8]: %timeit l.fill(3)
    100000 loops, best of 3: 7.71 us per loop

    In [9]: %timeit s[0] = 3
    10000000 loops, best of 3: 116 ns per loop

Numpy's broadcast_arrays uses as_strided under the hood.  Code could look
like:

    x, y = np.broadcast_arrays(3, [60, 80, 120, 180])
    plt.plot(x, y, '+')
    x[0] = 21  # new x for all samples
    plt.plot(x, y, 'x')


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to