> 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