ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ ]c@`sddlmZmZmZddlZddljjZddlm Z m Z m Z m Z m Z mZmZddlmZmZmZddlmZddlmZmZddlmZddlmZd d d d d dddddddddgZdZdZdZ eZ!dZ"dZ#dZ$ddZ%ddZ&dZ'd Z(d!Z)d"Z*d#Z+d$Z,d%Z-dS(&i(tdivisiontabsolute_importtprint_functionN(tasarraytzerostoutert concatenatetisscalartarrayt asanyarray(tproducttreshapet transpose(tnormalize_axis_index(tvstackt atleast_3d(tndindex(tmatrixt column_stackt row_stacktdstackt array_splittsplitthsplittvsplittdsplittapply_over_axest expand_dimstapply_along_axistkronttiletget_array_wrapcO`st|}|j}t||}tt|}t||| ||d|g}t|jd }d|D}yt|} Wnt k rt dnXt||| ||} t |jd | j| j } tt| j} | d|!| | j| j| j!| || j| j!} t | ts[| j| } n| | | >> def my_func(a): ... """Average first and last element of a 1-D array""" ... return (a[0] + a[-1]) * 0.5 >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> np.apply_along_axis(my_func, 0, b) array([ 4., 5., 6.]) >>> np.apply_along_axis(my_func, 1, b) array([ 2., 5., 8.]) For a function that returns a 1D array, the number of dimensions in `outarr` is the same as `arr`. >>> b = np.array([[8,1,7], [4,3,9], [5,2,6]]) >>> np.apply_along_axis(sorted, 1, b) array([[1, 7, 8], [3, 4, 9], [2, 5, 6]]) For a function that returns a higher dimensional array, those dimensions are inserted in place of the `axis` dimension. >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> np.apply_along_axis(np.diag, -1, b) array([[[1, 0, 0], [0, 2, 0], [0, 0, 3]], [[4, 0, 0], [0, 5, 0], [0, 0, 6]], [[7, 0, 0], [0, 8, 0], [0, 0, 9]]]) iics`s|]}|tfVqdS(N(tEllipsis(t.0tind((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys mss;Cannot apply_along_axis when any iteration dimensions are 0iN(R tndimR tlisttrangeR Rtshapetnextt StopIterationt ValueErrorRtdtypet isinstanceRt__array_prepare__t__array_wrap__(tfunc1dtaxistarrtargstkwargstndtin_dimst inarr_viewtindstind0trestbufft buff_dimst buff_permuteR"tout_arr((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs4K  &  "  $ cC`st|}|j}t|jdkr6|f}nx|D]}|dkr\||}n||f}||}|j|jkr|}q=t||}|j|jkr|}q=tdq=W|S(sz Apply a function repeatedly over multiple axes. `func` is called as `res = func(a, axis)`, where `axis` is the first element of `axes`. The result `res` of the function call must have either the same dimensions as `a` or one less dimension. If `res` has one less dimension than `a`, a dimension is inserted before `axis`. The call to `func` is then repeated for each axis in `axes`, with `res` as the first argument. Parameters ---------- func : function This function must take two arguments, `func(a, axis)`. a : array_like Input array. axes : array_like Axes over which `func` is applied; the elements must be integers. Returns ------- apply_over_axis : ndarray The output array. The number of dimensions is the same as `a`, but the shape can be different. This depends on whether `func` changes the shape of its output with respect to its input. See Also -------- apply_along_axis : Apply a function to 1-D slices of an array along the given axis. Notes ------ This function is equivalent to tuple axis arguments to reorderable ufuncs with keepdims=True. Tuple axis arguments to ufuncs have been available since version 1.7.0. Examples -------- >>> a = np.arange(24).reshape(2,3,4) >>> a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) Sum over axes 0 and 2. The result has same number of dimensions as the original array: >>> np.apply_over_axes(np.sum, a, [0,2]) array([[[ 60], [ 92], [124]]]) Tuple axis arguments to ufuncs are equivalent: >>> np.sum(a, axis=(0,2), keepdims=True) array([[[ 60], [ 92], [124]]]) is7function is not returning an array of the correct shape(RR#RRR)(tfunctataxestvaltNR/R1R8((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs A          cC`st|}|j}||jks8||j dkrQtjdtddn|dkrq||jd}n|j|| d||S(s Expand the shape of an array. Insert a new axis that will appear at the `axis` position in the expanded array shape. .. note:: Previous to NumPy 1.13.0, neither ``axis < -a.ndim - 1`` nor ``axis > a.ndim`` raised errors or put the new axis where documented. Those axis values are now deprecated and will raise an AxisError in the future. Parameters ---------- a : array_like Input array. axis : int Position in the expanded axes where the new axis is placed. Returns ------- res : ndarray Output array. The number of dimensions is one greater than that of the input array. See Also -------- squeeze : The inverse operation, removing singleton dimensions reshape : Insert, remove, and combine dimensions, and resize existing ones doc.indexing, atleast_1d, atleast_2d, atleast_3d Examples -------- >>> x = np.array([1,2]) >>> x.shape (2,) The following is equivalent to ``x[np.newaxis,:]`` or ``x[np.newaxis]``: >>> y = np.expand_dims(x, axis=0) >>> y array([[1, 2]]) >>> y.shape (1, 2) >>> y = np.expand_dims(x, axis=1) # Equivalent to x[:,newaxis] >>> y array([[1], [2]]) >>> y.shape (2, 1) Note that some examples may use ``None`` instead of ``np.newaxis``. These are the same objects: >>> np.newaxis is None True iscBoth axis > a.ndim and axis < -a.ndim - 1 are deprecated and will raise an AxisError in the future.t stacklevelii(i(RR&R#twarningstwarntDeprecationWarningR (R>R/R&((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs;  #  c C`sg}xf|D]^}t|dtdt}|jdkr^t|dtdtddj}n|j|q Wtj|dS(s Stack 1-D arrays as columns into a 2-D array. Take a sequence of 1-D arrays and stack them as columns to make a single 2-D array. 2-D arrays are stacked as-is, just like with `hstack`. 1-D arrays are turned into 2-D columns first. Parameters ---------- tup : sequence of 1-D or 2-D arrays. Arrays to stack. All of them must have the same first dimension. Returns ------- stacked : 2-D array The array formed by stacking the given arrays. See Also -------- hstack, vstack, concatenate Examples -------- >>> a = np.array((1,2,3)) >>> b = np.array((2,3,4)) >>> np.column_stack((a,b)) array([[1, 2], [2, 3], [3, 4]]) tcopytsubokitndmini(RtFalsetTrueR#tTtappendt_nxR(ttuptarraystvR0((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR:s! $cC`s)tjg|D]}t|^q dS(s Stack arrays in sequence depth wise (along third axis). Takes a sequence of arrays and stack them along the third axis to make a single array. Rebuilds arrays divided by `dsplit`. This is a simple way to stack 2D arrays (images) into a single 3D array for processing. This function continues to be supported for backward compatibility, but you should prefer ``np.concatenate`` or ``np.stack``. The ``np.stack`` function was added in NumPy 1.10. Parameters ---------- tup : sequence of arrays Arrays to stack. All of them must have the same shape along all but the third axis. Returns ------- stacked : ndarray The array formed by stacking the given arrays. See Also -------- stack : Join a sequence of arrays along a new axis. vstack : Stack along first axis. hstack : Stack along second axis. concatenate : Join a sequence of arrays along an existing axis. dsplit : Split array along third axis. Notes ----- Equivalent to ``np.concatenate(tup, axis=2)`` if `tup` contains arrays that are at least 3-dimensional. Examples -------- >>> a = np.array((1,2,3)) >>> b = np.array((2,3,4)) >>> np.dstack((a,b)) array([[[1, 2], [2, 3], [3, 4]]]) >>> a = np.array([[1],[2],[3]]) >>> b = np.array([[2],[3],[4]]) >>> np.dstack((a,b)) array([[[1, 2]], [[2, 3]], [[3, 4]]]) i(RMRR(RNt_m((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRcs6cC`sxtt|D]}tj||dkrUtjdd||j||>> x = np.arange(8.0) >>> np.array_split(x, 3) [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])] iis&number sections must be larger than 0.(R&tAttributeErrorRRR$t TypeErrortintR)tdivmodRMRtcumsumtswapaxesR%RL(tarytindices_or_sectionsR/tNtotalt Nsectionst div_pointst Neach_sectiontextrast section_sizesRVtsaryRWtsttend((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs,     'cC`sdyt|Wn=tk rM|}|j|}||rNtdqNnXt|||}|S(s Split an array into multiple sub-arrays. Parameters ---------- ary : ndarray Array to be divided into sub-arrays. indices_or_sections : int or 1-D array If `indices_or_sections` is an integer, N, the array will be divided into N equal arrays along `axis`. If such a split is not possible, an error is raised. If `indices_or_sections` is a 1-D array of sorted integers, the entries indicate where along `axis` the array is split. For example, ``[2, 3]`` would, for ``axis=0``, result in - ary[:2] - ary[2:3] - ary[3:] If an index exceeds the dimension of the array along `axis`, an empty sub-array is returned correspondingly. axis : int, optional The axis along which to split, default is 0. Returns ------- sub-arrays : list of ndarrays A list of sub-arrays. Raises ------ ValueError If `indices_or_sections` is given as an integer, but a split does not result in equal division. See Also -------- array_split : Split an array into multiple sub-arrays of equal or near-equal size. Does not raise an exception if an equal division cannot be made. hsplit : Split array into multiple sub-arrays horizontally (column-wise). vsplit : Split array into multiple sub-arrays vertically (row wise). dsplit : Split array into multiple sub-arrays along the 3rd axis (depth). concatenate : Join a sequence of arrays along an existing axis. stack : Join a sequence of arrays along a new axis. hstack : Stack arrays in sequence horizontally (column wise). vstack : Stack arrays in sequence vertically (row wise). dstack : Stack arrays in sequence depth wise (along third dimension). Examples -------- >>> x = np.arange(9.0) >>> np.split(x, 3) [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])] >>> x = np.arange(8.0) >>> np.split(x, [3, 5, 6, 10]) [array([ 0., 1., 2.]), array([ 3., 4.]), array([ 5.]), array([ 6., 7.]), array([], dtype=float64)] s0array split does not result in an equal division(RRRZR&R)R(R_R`R/tsectionsRAR8((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRsB   cC`sWtj|dkr$tdn|jdkrCt||dSt||dSdS(s Split an array into multiple sub-arrays horizontally (column-wise). Please refer to the `split` documentation. `hsplit` is equivalent to `split` with ``axis=1``, the array is always split along the second axis regardless of the array dimension. See Also -------- split : Split an array into multiple sub-arrays of equal size. Examples -------- >>> x = np.arange(16.0).reshape(4, 4) >>> x array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [ 12., 13., 14., 15.]]) >>> np.hsplit(x, 2) [array([[ 0., 1.], [ 4., 5.], [ 8., 9.], [ 12., 13.]]), array([[ 2., 3.], [ 6., 7.], [ 10., 11.], [ 14., 15.]])] >>> np.hsplit(x, np.array([3, 6])) [array([[ 0., 1., 2.], [ 4., 5., 6.], [ 8., 9., 10.], [ 12., 13., 14.]]), array([[ 3.], [ 7.], [ 11.], [ 15.]]), array([], dtype=float64)] With a higher dimensional array the split is still along the second axis. >>> x = np.arange(8.0).reshape(2, 2, 2) >>> x array([[[ 0., 1.], [ 2., 3.]], [[ 4., 5.], [ 6., 7.]]]) >>> np.hsplit(x, 2) [array([[[ 0., 1.]], [[ 4., 5.]]]), array([[[ 2., 3.]], [[ 6., 7.]]])] is3hsplit only works on arrays of 1 or more dimensionsiN(RMR#R)R(R_R`((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR!s 7cC`s4tj|dkr$tdnt||dS(sI Split an array into multiple sub-arrays vertically (row-wise). Please refer to the ``split`` documentation. ``vsplit`` is equivalent to ``split`` with `axis=0` (default), the array is always split along the first axis regardless of the array dimension. See Also -------- split : Split an array into multiple sub-arrays of equal size. Examples -------- >>> x = np.arange(16.0).reshape(4, 4) >>> x array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [ 12., 13., 14., 15.]]) >>> np.vsplit(x, 2) [array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.]]), array([[ 8., 9., 10., 11.], [ 12., 13., 14., 15.]])] >>> np.vsplit(x, np.array([3, 6])) [array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]]), array([[ 12., 13., 14., 15.]]), array([], dtype=float64)] With a higher dimensional array the split is still along the first axis. >>> x = np.arange(8.0).reshape(2, 2, 2) >>> x array([[[ 0., 1.], [ 2., 3.]], [[ 4., 5.], [ 6., 7.]]]) >>> np.vsplit(x, 2) [array([[[ 0., 1.], [ 2., 3.]]]), array([[[ 4., 5.], [ 6., 7.]]])] is3vsplit only works on arrays of 2 or more dimensionsi(RMR#R)R(R_R`((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR_s/cC`s4tj|dkr$tdnt||dS(s Split array into multiple sub-arrays along the 3rd axis (depth). Please refer to the `split` documentation. `dsplit` is equivalent to `split` with ``axis=2``, the array is always split along the third axis provided the array dimension is greater than or equal to 3. See Also -------- split : Split an array into multiple sub-arrays of equal size. Examples -------- >>> x = np.arange(16.0).reshape(2, 2, 4) >>> x array([[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.]], [[ 8., 9., 10., 11.], [ 12., 13., 14., 15.]]]) >>> np.dsplit(x, 2) [array([[[ 0., 1.], [ 4., 5.]], [[ 8., 9.], [ 12., 13.]]]), array([[[ 2., 3.], [ 6., 7.]], [[ 10., 11.], [ 14., 15.]]])] >>> np.dsplit(x, np.array([3, 6])) [array([[[ 0., 1., 2.], [ 4., 5., 6.]], [[ 8., 9., 10.], [ 12., 13., 14.]]]), array([[[ 3.], [ 7.]], [[ 11.], [ 15.]]]), array([], dtype=float64)] is3dsplit only works on arrays of 3 or more dimensionsi(RMR#R)R(R_R`((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs)cG`s2tdt|D}|r.|ddSdS(sFind the wrapper for the array with the highest priority. In case of ties, leftmost wins. If no wrapper is found, return None cs`sC|]9\}}t|drt|dd| |jfVqdS(R,t__array_priority__iN(thasattrtgetattrR,(R!RWtx((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys s iN(tsortedt enumeratetNone(R1twrappers((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pytget_array_prepares   cG`s2tdt|D}|r.|ddSdS(sFind the wrapper for the array with the highest priority. In case of ties, leftmost wins. If no wrapper is found, return None cs`sC|]9\}}t|drt|dd| |jfVqdS(R-RkiN(RlRmR-(R!RWRn((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys s iN(RoRpRq(R1Rr((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs   c C`st|}t|dtdtd|j}|j|j}}|dksX|dkrhtj||S|j}|j}|jj st ||}n|jj st ||}n|}||kr||krd|||}qd|||}|}nt ||j ||}|d}x&t |D]} t |d|}q7Wt||} | d k r}| |}nt||} | d k r| |}n|S( s Kronecker product of two arrays. Computes the Kronecker product, a composite array made of blocks of the second array scaled by the first. Parameters ---------- a, b : array_like Returns ------- out : ndarray See Also -------- outer : The outer product Notes ----- The function assumes that the number of dimensions of `a` and `b` are the same, if necessary prepending the smallest with ones. If `a.shape = (r0,r1,..,rN)` and `b.shape = (s0,s1,...,sN)`, the Kronecker product has shape `(r0*s0, r1*s1, ..., rN*SN)`. The elements are products of elements from `a` and `b`, organized explicitly by:: kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN] where:: kt = it * st + jt, t = 0,...,N In the common 2-D case (N=1), the block structure can be visualized:: [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ], [ ... ... ], [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]] Examples -------- >>> np.kron([1,10,100], [5,6,7]) array([ 5, 6, 7, 50, 60, 70, 500, 600, 700]) >>> np.kron([5,6,7], [1,10,100]) array([ 5, 50, 500, 6, 60, 600, 7, 70, 700]) >>> np.kron(np.eye(2), np.ones((2,2))) array([[ 1., 1., 0., 0.], [ 1., 1., 0., 0.], [ 0., 0., 1., 1.], [ 0., 0., 1., 1.]]) >>> a = np.arange(100).reshape((2,5,2,5)) >>> b = np.arange(24).reshape((2,3,4)) >>> c = np.kron(a,b) >>> c.shape (2, 10, 6, 20) >>> I = (1,3,0,2) >>> J = (0,2,1) >>> J1 = (0,) + J # extend to ndim=4 >>> S1 = (1,) + b.shape >>> K = tuple(np.array(I) * np.array(S1) + np.array(J1)) >>> c[K] == a[I]*b[J] True RFRGRHiiR/(i(iN(R RRIRJR#RMtmultiplyR&tflagst contiguousR RR%RRsRqR( R>tbtndbtndatas_tbsR3tresultR/t_twrapper((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs8D !          c C`siyt|}Wntk r,|f}nXt|}td|Drt|tjrtj|dtdtd|Stj|dt dtd|}||j krd |j ||}ntdt |j |D}|j }|dkr\xZt |j |D]C\}}|dkrK|jd|j|d}n||}qWn|j|S( s Construct an array by repeating A the number of times given by reps. If `reps` has length ``d``, the result will have dimension of ``max(d, A.ndim)``. If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication, or shape (1, 1, 3) for 3-D replication. If this is not the desired behavior, promote `A` to d-dimensions manually before calling this function. If ``A.ndim > d``, `reps` is promoted to `A`.ndim by pre-pending 1's to it. Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as (1, 1, 2, 2). Note : Although tile may be used for broadcasting, it is strongly recommended to use numpy's broadcasting operations and functions. Parameters ---------- A : array_like The input array. reps : array_like The number of repetitions of `A` along each axis. Returns ------- c : ndarray The tiled output array. See Also -------- repeat : Repeat elements of an array. broadcast_to : Broadcast an array to a new shape Examples -------- >>> a = np.array([0, 1, 2]) >>> np.tile(a, 2) array([0, 1, 2, 0, 1, 2]) >>> np.tile(a, (2, 2)) array([[0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2]]) >>> np.tile(a, (2, 1, 2)) array([[[0, 1, 2, 0, 1, 2]], [[0, 1, 2, 0, 1, 2]]]) >>> b = np.array([[1, 2], [3, 4]]) >>> np.tile(b, 2) array([[1, 2, 1, 2], [3, 4, 3, 4]]) >>> np.tile(b, (2, 1)) array([[1, 2], [3, 4], [1, 2], [3, 4]]) >>> c = np.array([1,2,3,4]) >>> np.tile(c,(4,1)) array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]) cs`s|]}|dkVqdS(iN((R!Rn((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys sRFRGRHics`s|]\}}||VqdS(N((R!tstt((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys sii(i(ttupleRZRRtallR+RMtndarrayRRJRIR#tzipR&tsizeR trepeat( tAtrepsRNtdtct shape_outtntdim_intnrep((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR:s$B   (!"   !(.t __future__RRRRCtnumpy.core.numerictcoretnumericRMRRRRRRR tnumpy.core.fromnumericR R R tnumpy.core.multiarrayR t numpy.coreRRtnumpy.lib.index_tricksRtnumpy.matrixlib.defmatrixRt__all__RRRRRRRXRRRRRRsRRR(((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyts6 4 U I ) 8  1 M > 3 - c