ó É9Zc@`saddlmZmZmZddlZddljjZddlm Z m Z m Z m Z m Z mZmZddlmZmZddlmZmZdddd d d d d ddddddgZd„Zd„Zd„ZeZd„Zd„Zd„Zdd„Zdd„Zd„Z d„Z!d„Z"d„Z#d „Z$d!„Z%d"„Z&dS(#i(tdivisiontabsolute_importtprint_functionN(tasarraytzerostoutert concatenatetisscalartarrayt asanyarray(tproducttreshape(tvstackt atleast_3dt column_stackt row_stacktdstackt array_splittsplitthsplittvsplittdsplittapply_over_axest expand_dimstapply_along_axistkronttiletget_array_wrapcO`s<t|ƒ}|j}|dkr.||7}n||krStd||fƒ‚ndg|d}t|dƒ}tt|ƒƒ}|j|ƒtddƒ||>> 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 doesn't return a scalar, 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]]) is2axis must be less than arr.ndim; axis=%d, rank=%d.itOiÿÿÿÿN(Rtndimt ValueErrorRtlisttrangetremovetslicetNonetshapettaketputttuplettolistRtdtypeR tlen(tfunc1dtaxistarrtargstkwargstndtindtitindlisttoutshapetrestoutarrtNtottktnt holdshape((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRsf9      "  ' " ' "cC`sÍt|ƒ}|j}t|ƒjdkr6|f}nx|D]ˆ}|dkr\||}n||f}||Œ}|j|jkr|}q=t||ƒ}|j|jkr¹|}q=tdƒ‚q=W|S(sy 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 availabe 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(RRRRR(tfunctataxestvaltNR,R.R5((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR†s A          cC`sUt|ƒ}|j}|dkr8|t|ƒd}n|j|| d||ƒS(s Expand the shape of an array. Insert a new axis, corresponding to a given position in the array shape. Parameters ---------- a : array_like Input array. axis : int Position (amongst axes) where new axis is to be inserted. Returns ------- res : ndarray Output array. The number of dimensions is one greater than that of the input array. See Also -------- 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 ii(i(RR$R*R (R<R,R$((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRÛs 3   c C`sg}xf|D]^}t|dtdtƒ}|jdkr^t|dtdtddƒj}n|j|ƒq Wtj|dƒS(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(RtFalsetTrueRtTtappendt_nxR(ttuptarraystvR-((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs! $cC`s)tjg|D]}t|ƒ^q dƒS(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. 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)``. 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(RGRR (RHt_m((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR?s1cC`s®x§tt|ƒƒD]“}ttj||ƒƒdkr[tjdd||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$tAttributeErrorR*Rt TypeErrortintRtdivmodRGRtcumsumtswapaxesR RF(tarytindices_or_sectionsR,tNtotalt Nsectionst div_pointst Neach_sectiontextrast section_sizesROtsaryR2tsttend((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRzs,     'cC`sdyt|ƒWn=tk rM|}|j|}||rNtdƒ‚qNnXt|||ƒ}|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(R*RRR$RR(RWRXR,tsectionsR?R5((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR«sB   cC`scttj|ƒƒdkr*tdƒ‚nt|jƒdkrOt||dƒSt||dƒSdS(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(R*RGR$RR(RWRX((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRøs 7cC`s:ttj|ƒƒdkr*tdƒ‚nt||dƒS(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(R*RGR$RR(RWRX((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR6s/cC`s:ttj|ƒƒdkr*tdƒ‚nt||dƒS(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(R*RGR$RR(RWRX((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRis)cG`s2td„t|ƒDƒƒ}|r.|ddSdS(s‡Find 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|dƒrt|ddƒ| |jfVqdS(t__array_prepare__t__array_priority__iN(thasattrtgetattrRc(t.0R2tx((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys ›s iÿÿÿÿN(tsortedt enumerateR#(R.twrappers((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pytget_array_prepare–s   cG`s2td„t|ƒDƒƒ}|r.|ddSdS(s‡Find 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|dƒrt|ddƒ| |jfVqdS(t__array_wrap__RdiN(ReRfRm(RgR2Rh((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys §s iÿÿÿÿN(RiRjR#(R.Rk((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR¢s   c C`s«t|ƒ}t|dtdtd|jƒ}|j|j}}|dksX|dkrhtj||ƒS|j}|j}|jj s˜t ||ƒ}n|jj s¶t ||ƒ}n|}||kr||kréd|||}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 R@RARBiiR,(i(iN(R RRCRDRRGtmultiplyR$tflagst contiguousR RR RRlR#R( R<tbtndbtndatas_tbsR0tresultR,t_twrapper((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR®s8D !          c C`siyt|ƒ}Wntk r,|f}nXt|ƒ}td„|Dƒƒr€t|tjƒr€tj|dtdtd|ƒStj|dt dtd|ƒ}||j krÈd |j ||}ntd„t |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((RgRh((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys XsR@RARBics`s|]\}}||VqdS(N((Rgtstt((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pys bsiiÿÿÿÿ(i(R'RRR*tallt isinstanceRGtndarrayRRDRCRtzipR$tsizeR trepeat( tAtrepsRHtdtct shape_outR9tdim_intnrep((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs$B   (!"   !('t __future__RRRtwarningstnumpy.core.numerictcoretnumericRGRRRRRRR tnumpy.core.fromnumericR R t numpy.coreR R t__all__RRRRRRRPRRRRRRlRRR(((sG/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/shape_base.pyts0 4 r U 9 ) 3  1 M > 3 - c