Python __builtin__.sum() Examples
The following are 27
code examples of __builtin__.sum().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
__builtin__
, or try the search function
.
Example #1
Source File: gnumpy.py From imageqa-public with MIT License | 6 votes |
def dot(a1, a2): # internally: for matrix-matrix multiplies only; vectors are treated like special cases. a1 = as_garray(a1); a2 = as_garray(a2) if a1.ndim==0 or a2.ndim==0: return a1*a2 if a1.ndim==a2.ndim==1: if a1 is a2: return sum(a1**2) else: return dot(a1.reshape(1, a1.size), a2.reshape(a2.size, 1)).item() if a1.ndim==2 and a2.ndim==1: return dot(a1, a2.reshape(a2.size, 1)).ravel() # treat a2 like a column vector if a1.ndim==1 and a2.ndim==2: return dot(a1._add_axes(2), a2)[0] # treat a1 like a row vector if a1.shape[-1] != a2.shape[-2]: raise ValueError('arrays not aligned for dot product. a dot product was requested of arrays with shapes %s and %s' % (a1.shape, a2.shape)) if a1.ndim==a2.ndim==2: retShape = (a1.shape[0], a2.shape[1]) if a1.shape[1]==0: return zeros(retShape) # cudamat bug workaround ret = empty(retShape) if ret.size!=0: _cudamat.dot(a2._base_as_2d(), a1._base_as_2d(), ret._base_as_2d()) return ret if a1.ndim >= 2 and a2.ndim >= 2: # this is not necessarily fast, because if a2.ndim>=3 then it involves a transpose a12 = ( a1.reshape_2d(-1) if a1.ndim!=2 else a1) a22 = ( a2.transpose((a2.ndim-2,) + tuple(xrange(a2.ndim-2)) + (a2.ndim-1,)).reshape_2d(1) if a2.ndim!=2 else a2) retShape = _deleteT2(a1.shape, -1) + _deleteT2(a2.shape, -2) return dot(a12, a22).reshape(retShape) raise NotImplementedError('dot with arguments of shapes %s and %s' % (a1.shape, a2.shape))
Example #2
Source File: gnumpy.py From imageqa-public with MIT License | 6 votes |
def concatenate(arrays, axis=0): arrays = tuple(map(as_garray, arrays)) if axis<0: axis += arrays[0].ndim if not _isSequence(arrays) or not type(axis) in _numberTypes: raise ValueError('wrong argument types to gnumpy.concatenate: expected <arrays> to be a sequence and <axis> to be a number, but got types %s and %s.' % (type(arrays), type(axis))) if axis not in range(arrays[0].ndim): raise ValueError('bad axis number (%d) specified (the first array has %d axes)' % (axis, arrays[0].ndim)) if not _allTheSame( _deleteT2(a.shape, axis) for a in arrays): raise ValueError('array dimensions must agree except possibly for axis #%d. The given array shapes are: %s' % (axis, tuple( a.shape for a in arrays))) finalShape = _modifyT(arrays[0].shape, axis, __builtin__.sum( a.shape[axis] for a in arrays)) if axis==0: ret = empty(finalShape) nextI = 0 for a in arrays: _cm_row_slice_read(ret._base_shaped(ret.ndim), nextI, nextI+a.size).assign(a._base_shaped(a.ndim)) nextI += a.size return ret else: return concatenate(tuple([ a.reshape_2d(axis).T for a in arrays]), 0).T.reshape(finalShape)
Example #3
Source File: test_multiarray.py From ImageFusion with MIT License | 6 votes |
def test_zeros(self): types = np.typecodes['AllInteger'] + np.typecodes['AllFloat'] for dt in types: d = np.zeros((13,), dtype=dt) assert_equal(np.count_nonzero(d), 0) # true for ieee floats assert_equal(d.sum(), 0) assert_(not d.any()) d = np.zeros(2, dtype='(2,4)i4') assert_equal(np.count_nonzero(d), 0) assert_equal(d.sum(), 0) assert_(not d.any()) d = np.zeros(2, dtype='4i4') assert_equal(np.count_nonzero(d), 0) assert_equal(d.sum(), 0) assert_(not d.any()) d = np.zeros(2, dtype='(2,4)i4, (2,4)i4') assert_equal(np.count_nonzero(d), 0)
Example #4
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 6 votes |
def dot(a1, a2): # internally: for matrix-matrix multiplies only; vectors are treated like special cases. a1 = as_garray(a1); a2 = as_garray(a2) if a1.ndim==0 or a2.ndim==0: return a1*a2 if a1.ndim==a2.ndim==1: if a1 is a2: return sum(a1**2) else: return dot(a1.reshape(1, a1.size), a2.reshape(a2.size, 1)).item() if a1.ndim==2 and a2.ndim==1: return dot(a1, a2.reshape(a2.size, 1)).ravel() # treat a2 like a column vector if a1.ndim==1 and a2.ndim==2: return dot(a1._add_axes(2), a2)[0] # treat a1 like a row vector if a1.shape[-1] != a2.shape[-2]: raise ValueError('arrays not aligned for dot product. a dot product was requested of arrays with shapes %s and %s' % (a1.shape, a2.shape)) if a1.ndim==a2.ndim==2: retShape = (a1.shape[0], a2.shape[1]) if a1.shape[1]==0: return zeros(retShape) # cudamat bug workaround ret = empty(retShape) if ret.size!=0: _cudamat.dot(a2._base_as_2d(), a1._base_as_2d(), ret._base_as_2d()) return ret if a1.ndim >= 2 and a2.ndim >= 2: # this is not necessarily fast, because if a2.ndim>=3 then it involves a transpose a12 = ( a1.reshape_2d(-1) if a1.ndim!=2 else a1) a22 = ( a2.transpose((a2.ndim-2,) + tuple(xrange(a2.ndim-2)) + (a2.ndim-1,)).reshape_2d(1) if a2.ndim!=2 else a2) retShape = _deleteT2(a1.shape, -1) + _deleteT2(a2.shape, -2) return dot(a12, a22).reshape(retShape) raise NotImplementedError('dot with arguments of shapes %s and %s' % (a1.shape, a2.shape))
Example #5
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 6 votes |
def concatenate(arrays, axis=0): arrays = tuple(map(as_garray, arrays)) if axis<0: axis += arrays[0].ndim if not _isSequence(arrays) or not type(axis) in _numberTypes: raise ValueError('wrong argument types to gnumpy.concatenate: expected <arrays> to be a sequence and <axis> to be a number, but got types %s and %s.' % (type(arrays), type(axis))) if axis not in range(arrays[0].ndim): raise ValueError('bad axis number (%d) specified (the first array has %d axes)' % (axis, arrays[0].ndim)) if not _allTheSame( _deleteT2(a.shape, axis) for a in arrays): raise ValueError('array dimensions must agree except possibly for axis #%d. The given array shapes are: %s' % (axis, tuple( a.shape for a in arrays))) finalShape = _modifyT(arrays[0].shape, axis, __builtin__.sum( a.shape[axis] for a in arrays)) if axis==0: ret = empty(finalShape) nextI = 0 for a in arrays: _cm_row_slice_read(ret._base_shaped(ret.ndim), nextI, nextI+a.size).assign(a._base_shaped(a.ndim)) nextI += a.size return ret else: return concatenate(tuple([ a.reshape_2d(axis).T for a in arrays]), 0).T.reshape(finalShape)
Example #6
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 5 votes |
def sum(x, axis=None): """ On numpy arrays this returns a numpy array; on garrays and other array-likes this returns a garray. """ return _reductor__base(x, axis, garray.sum, numpy.sum)
Example #7
Source File: sparse.py From SNIPER-mxnet with Apache License 2.0 | 5 votes |
def _new_alloc_handle(stype, shape, ctx, delay_alloc, dtype, aux_types, aux_shapes=None): """Return a new handle with specified storage type, shape, dtype and context. Empty handle is only used to hold results Returns ------- handle A new empty ndarray handle """ hdl = NDArrayHandle() for aux_t in aux_types: if np.dtype(aux_t) != np.dtype("int64"): raise NotImplementedError("only int64 is supported for aux types") aux_type_ids = [int(_DTYPE_NP_TO_MX[np.dtype(aux_t).type]) for aux_t in aux_types] aux_shapes = [(0,) for aux_t in aux_types] if aux_shapes is None else aux_shapes aux_shape_lens = [len(aux_shape) for aux_shape in aux_shapes] aux_shapes = py_sum(aux_shapes, ()) num_aux = mx_uint(len(aux_types)) check_call(_LIB.MXNDArrayCreateSparseEx( ctypes.c_int(int(_STORAGE_TYPE_STR_TO_ID[stype])), c_array_buf(mx_uint, native_array('I', shape)), mx_uint(len(shape)), ctypes.c_int(ctx.device_typeid), ctypes.c_int(ctx.device_id), ctypes.c_int(int(delay_alloc)), ctypes.c_int(int(_DTYPE_NP_TO_MX[np.dtype(dtype).type])), num_aux, c_array_buf(ctypes.c_int, native_array('i', aux_type_ids)), c_array_buf(mx_uint, native_array('I', aux_shape_lens)), c_array_buf(mx_uint, native_array('I', aux_shapes)), ctypes.byref(hdl))) return hdl
Example #8
Source File: test_multiarray.py From ImageFusion with MIT License | 5 votes |
def test_export_record(self): dt = [('a', 'b'), ('b', 'h'), ('c', 'i'), ('d', 'l'), ('dx', 'q'), ('e', 'B'), ('f', 'H'), ('g', 'I'), ('h', 'L'), ('hx', 'Q'), ('i', np.single), ('j', np.double), ('k', np.longdouble), ('ix', np.csingle), ('jx', np.cdouble), ('kx', np.clongdouble), ('l', 'S4'), ('m', 'U4'), ('n', 'V3'), ('o', '?'), ('p', np.half), ] x = np.array( [(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, asbytes('aaaa'), 'bbbb', asbytes(' '), True, 1.0)], dtype=dt) y = memoryview(x) assert_equal(y.shape, (1,)) assert_equal(y.ndim, 1) assert_equal(y.suboffsets, EMPTY) sz = sum([dtype(b).itemsize for a, b in dt]) if dtype('l').itemsize == 4: assert_equal(y.format, 'T{b:a:=h:b:i:c:l:d:q:dx:B:e:@H:f:=I:g:L:h:Q:hx:f:i:d:j:^g:k:=Zf:ix:Zd:jx:^Zg:kx:4s:l:=4w:m:3x:n:?:o:@e:p:}') else: assert_equal(y.format, 'T{b:a:=h:b:i:c:q:d:q:dx:B:e:@H:f:=I:g:Q:h:Q:hx:f:i:d:j:^g:k:=Zf:ix:Zd:jx:^Zg:kx:4s:l:=4w:m:3x:n:?:o:@e:p:}') # Cannot test if NPY_RELAXED_STRIDES_CHECKING changes the strides if not (np.ones(1).strides[0] == np.iinfo(np.intp).max): assert_equal(y.strides, (sz,)) assert_equal(y.itemsize, sz)
Example #9
Source File: test_multiarray.py From ImageFusion with MIT License | 5 votes |
def test_count_nonzero_unaligned(self): # prevent mistakes as e.g. gh-4060 for o in range(7): a = np.zeros((18,), dtype=np.bool)[o+1:] a[:o] = True self.assertEqual(np.count_nonzero(a), builtins.sum(a.tolist())) a = np.ones((18,), dtype=np.bool)[o+1:] a[:o] = False self.assertEqual(np.count_nonzero(a), builtins.sum(a.tolist()))
Example #10
Source File: test_multiarray.py From ImageFusion with MIT License | 5 votes |
def check_count_nonzero(self, power, length): powers = [2 ** i for i in range(length)] for i in range(2**power): l = [(i & x) != 0 for x in powers] a = np.array(l, dtype=np.bool) c = builtins.sum(l) self.assertEqual(np.count_nonzero(a), c) av = a.view(np.uint8) av *= 3 self.assertEqual(np.count_nonzero(a), c) av *= 4 self.assertEqual(np.count_nonzero(a), c) av[av != 0] = 0xFF self.assertEqual(np.count_nonzero(a), c)
Example #11
Source File: test_multiarray.py From ImageFusion with MIT License | 5 votes |
def test_sum(self): d = np.ones(101, dtype=np.bool); assert_equal(d.sum(), d.size) assert_equal(d[::2].sum(), d[::2].size) assert_equal(d[::-2].sum(), d[::-2].size) d = np.frombuffer(b'\xff\xff' * 100, dtype=bool) assert_equal(d.sum(), d.size) assert_equal(d[::2].sum(), d[::2].size) assert_equal(d[::-2].sum(), d[::-2].size)
Example #12
Source File: sparse.py From mxnet-lambda with Apache License 2.0 | 5 votes |
def _new_alloc_handle(stype, shape, ctx, delay_alloc, dtype, aux_types, aux_shapes=None): """Return a new handle with specified storage type, shape, dtype and context. Empty handle is only used to hold results Returns ------- handle A new empty ndarray handle """ hdl = NDArrayHandle() for aux_t in aux_types: if np.dtype(aux_t) != np.dtype("int64"): raise NotImplementedError("only int64 is supported for aux types") aux_type_ids = [int(_DTYPE_NP_TO_MX[np.dtype(aux_t).type]) for aux_t in aux_types] aux_shapes = [(0,) for aux_t in aux_types] if aux_shapes is None else aux_shapes aux_shape_lens = [len(aux_shape) for aux_shape in aux_shapes] aux_shapes = py_sum(aux_shapes, ()) num_aux = mx_uint(len(aux_types)) check_call(_LIB.MXNDArrayCreateSparseEx( ctypes.c_int(int(_STORAGE_TYPE_STR_TO_ID[stype])), c_array(mx_uint, shape), mx_uint(len(shape)), ctypes.c_int(ctx.device_typeid), ctypes.c_int(ctx.device_id), ctypes.c_int(int(delay_alloc)), ctypes.c_int(int(_DTYPE_NP_TO_MX[np.dtype(dtype).type])), num_aux, c_array(ctypes.c_int, aux_type_ids), c_array(mx_uint, aux_shape_lens), c_array(mx_uint, aux_shapes), ctypes.byref(hdl))) return hdl
Example #13
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 5 votes |
def any2(self, axis=None): return self.sum(axis) > 0 # optimized for when I'm sure that the content is boolean
Example #14
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 5 votes |
def mean(self, axis=None): return self.sum(axis) / ( self.size if axis==None else self.shape[axis])
Example #15
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 5 votes |
def sum(self, axis=None): return self._reduction__base('sum', axis)
Example #16
Source File: sparse.py From dynamic-training-with-apache-mxnet-on-aws with Apache License 2.0 | 5 votes |
def _new_alloc_handle(stype, shape, ctx, delay_alloc, dtype, aux_types, aux_shapes=None): """Return a new handle with specified storage type, shape, dtype and context. Empty handle is only used to hold results Returns ------- handle A new empty ndarray handle """ hdl = NDArrayHandle() for aux_t in aux_types: if np.dtype(aux_t) != np.dtype("int64"): raise NotImplementedError("only int64 is supported for aux types") aux_type_ids = [int(_DTYPE_NP_TO_MX[np.dtype(aux_t).type]) for aux_t in aux_types] aux_shapes = [(0,) for aux_t in aux_types] if aux_shapes is None else aux_shapes aux_shape_lens = [len(aux_shape) for aux_shape in aux_shapes] aux_shapes = py_sum(aux_shapes, ()) num_aux = mx_uint(len(aux_types)) check_call(_LIB.MXNDArrayCreateSparseEx( ctypes.c_int(int(_STORAGE_TYPE_STR_TO_ID[stype])), c_array_buf(mx_uint, native_array('I', shape)), mx_uint(len(shape)), ctypes.c_int(ctx.device_typeid), ctypes.c_int(ctx.device_id), ctypes.c_int(int(delay_alloc)), ctypes.c_int(int(_DTYPE_NP_TO_MX[np.dtype(dtype).type])), num_aux, c_array_buf(ctypes.c_int, native_array('i', aux_type_ids)), c_array_buf(mx_uint, native_array('I', aux_shape_lens)), c_array_buf(mx_uint, native_array('I', aux_shapes)), ctypes.byref(hdl))) return hdl
Example #17
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 5 votes |
def _rand__base(shapeInfo, distribution, zero_d_means_scalar): if len(shapeInfo)==1 and _isSequence(shapeInfo[0]): zero_d_means_scalar = False; shapeInfo = shapeInfo[0] ret = empty(shapeInfo) {'uniform': _cmType.fill_with_rand, 'normal': _cmType.fill_with_randn}[distribution](ret._base) if ret.size!=0 and _doExpensiveCheck(): assert ret.sum() < 100 + 2*ret.size, 'numerical gpu error: rand() gave a result>100' if len(shapeInfo) == 0 and zero_d_means_scalar: return ret.item() else: return ret
Example #18
Source File: gnumpy.py From imageqa-public with MIT License | 5 votes |
def any2(self, axis=None): return self.sum(axis) > 0 # optimized for when I'm sure that the content is boolean
Example #19
Source File: gnumpy.py From imageqa-public with MIT License | 5 votes |
def mean(self, axis=None): return self.sum(axis) / ( self.size if axis==None else self.shape[axis])
Example #20
Source File: gnumpy.py From imageqa-public with MIT License | 5 votes |
def sum(self, axis=None): return self._reduction__base('sum', axis)
Example #21
Source File: gnumpy.py From imageqa-public with MIT License | 5 votes |
def sum(x, axis=None): """ On numpy arrays this returns a numpy array; on garrays and other array-likes this returns a garray. """ return _reductor__base(x, axis, garray.sum, numpy.sum)
Example #22
Source File: gnumpy.py From imageqa-public with MIT License | 5 votes |
def _rand__base(shapeInfo, distribution, zero_d_means_scalar): if len(shapeInfo)==1 and _isSequence(shapeInfo[0]): zero_d_means_scalar = False; shapeInfo = shapeInfo[0] ret = empty(shapeInfo) {'uniform': _cmType.fill_with_rand, 'normal': _cmType.fill_with_randn}[distribution](ret._base) if ret.size!=0 and _doExpensiveCheck(): assert ret.sum() < 100 + 2*ret.size, 'numerical gpu error: rand() gave a result>100' if len(shapeInfo) == 0 and zero_d_means_scalar: return ret.item() else: return ret
Example #23
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 4 votes |
def _reduction__base(self, operatorName, axis): if axis==None: return self.ravel()._reduction__base(operatorName, 0).item() if not type(axis) in _numberTypes: raise TypeError('the value %s is not appropriate for the "axis" parameter.' % str(axis)) if axis < -self.ndim or axis>=self.ndim: raise ValueError('axis (%d) out of bounds for an array with %d axes.' % (axis, self.ndim)) axis = int(axis) % self.ndim if self.size==0: retShape = _deleteT2(self.shape, axis) if operatorName=='sum': return zeros(retShape) elif operatorName=='max': return tile(-inf, retShape) else: assert False if operatorName=='max' and axis==0 and cudamatHas('maxAxis0'): # my own fast implementation ret = empty(self.shape[1:]) _ctInt = _cudamat.ct.c_int nThreadsPerBlock = 32 gridX, gridY = ((ret.size+nThreadsPerBlock-1)//nThreadsPerBlock), 1 while gridX>65535: gridY*=2; gridX = (gridX+1)//2; _cudamat._cudamat.maxAxis0.restype = _ctypes.c_int assert 0==_cudamat._cudamat.maxAxis0(_ctInt(gridX), _ctInt(gridY), _ctInt(nThreadsPerBlock), self._base.p_mat, ret._base.p_mat, _ctInt(self.shape[0]), _ctInt(ret.size)) return ret if axis==0 and operatorName=='max': # max over rows is not yet supported in cudamat return self.reshape_2d(1).T.max(1).reshape(self.shape[1:]) if axis==0 and self.ndim==1 and self.size>5000 and operatorName=='sum': # optimization. apparently, cudamat is not maximally efficient. n = int(numpy.sqrt(self.size-1)) return self[:n*n].reshape((n, n))._reduction__base(operatorName, 0)._reduction__base(operatorName, 0) + self[n*n:]._reduction__base(operatorName, 0) if operatorName=='sum': chunkSize = 1024*256 # sum over longer dimensions fails in cudamat nChunks = (self.shape[axis] + chunkSize-1) // chunkSize if nChunks>1: return reduceAdd( self[(slice(None),) * axis + (slice(chunkI*chunkSize, __builtin__.min(self.shape[axis], (chunkI+1)*chunkSize)),)]._reduction__base(operatorName, axis) for chunkI in range(nChunks)) if operatorName=='max' and self.isnan().any2(): # cudamat bug workaround return garray(self.asarray().max(axis)) operatorInCm = {'sum': _cmType.sum, 'max': _cmType.max}[operatorName] if axis==0: return _check_number_types(garray(operatorInCm(self._base_shaped(1), 1, _new_cm(_prodT(self.shape[1:]))), self.shape[1:], None)) if axis==self.ndim-1: if self.ndim!=2: return self.reshape_2d(-1)._reduction__base(operatorName, 1).reshape(self.shape[:-1]) if self.ndim==2: chunkSize = 2**16-1 nChunks = (len(self) + chunkSize-1) // chunkSize if nChunks>1: # cudamat chokes on big arrays, so break it in pieces for cudamat chunks = tuple([ self[chunkI*chunkSize : __builtin__.min((chunkI+1)*chunkSize, len(self))] for chunkI in range(nChunks)]) return concatenate([ chunk._reduction__base(operatorName, 1) for chunk in chunks]) else: # small array return _check_number_types(garray(operatorInCm(self._base_shaped(1), 0, _new_cm((len(self), 1))), (len(self),), None)) return self.transpose_simple(axis)._reduction__base(operatorName, 0).transpose_simple(-axis) # ------------------------------------------------------------------------------- external misc non-numerical
Example #24
Source File: gnumpy.py From DeepNeuralNet-QSAR with GNU General Public License v3.0 | 4 votes |
def __getitem__(self, selectors): selectors = _nonSeqAsS(selectors) for i,sel in enumerate(selectors): # deal with newaxis and ellipsis if sel is Ellipsis: return self[selectors[:i] + (slice(None),)* (self.ndim - (__builtin__.sum( x != None for x in selectors)-1)) + selectors[i+1:]] # sel==Ellipsis is bad when sel is an array if sel is newaxis: return self.reshape(_insertT(self.shape, i, (1,)))[_modifyT(selectors, i, slice(None))] if len(selectors) > self.ndim: raise IndexError('more indices than axes') if _all2_(selectors, _isFullSlice): return self if reduce(operator.and_, ( _isSequence(sel) or is_array(sel) for sel in selectors), True) and len(selectors)>=2: selectors = tuple(map(as_garray, selectors)) if reduce(operator.or_, ( (sel < 0).sum() > 0 for sel in selectors), False): raise NotImplementedError('negative indices in index arrays, combined with having multiple indices arrays') # ravel the first two dimensions into one, and translate the corresponding indices arrays into one accordingly return self.reshape((self.shape[0]*self.shape[1],) + self.shape[2:])[(selectors[0]*self.shape[1]+selectors[1],) + selectors[2:]] if __builtin__.sum( _isSequence(sel) or is_array(sel) for sel in selectors)>1: raise NotImplementedError('slicing with more than one sequence/array among the indices, with also other kinds of values among the indices') # handle the operations on different axes one by one; earlier axes are handled earlier axisI = ( i for i, x in enumerate(selectors) if not _isFullSlice(x)).next() axisLen = self.shape[axisI] axisSelector = selectors[axisI] if not _all2_(selectors[axisI+1:], _isFullSlice): return self[selectors[:axisI+1]][(slice(None),)*(axisI+(not type(axisSelector) in _numberTypes)) + selectors[axisI+1:]] # first select on axisI only; then do the further axes. # from here, axisI is the only axis on which we don't take a full slice if type(axisSelector) == types.SliceType and axisSelector.step not in (1, None): axisSelector = numpy.arange(axisLen)[axisSelector] if type(axisSelector) in _numberTypes: # selecting a single location on axisI, and thus reducing the dimensionality by 1 ret = self[selectors[:axisI] + (_short_slice(_read_single_index(axisSelector, axisLen)),)] .reshape(_deleteT2(self.shape, axisI)) return ( ret.item() if ret.shape==_t0 else ret) # exception, to have the same behavior as numpy if _isSequence(axisSelector) or type(axisSelector) == numpy.ndarray: axisSelector = garray(axisSelector) if isinstance(axisSelector, garray): # a 1d index means re-arranging this axis. I.e. a number of length 1 selections on this axis, concatenated on this axis. # other dimensionality means using the raveled version, and then reshaping to reflect the selector dimensionality if hasattr(_cmType, 'select_columns'): if axisI==0: if _doExpensiveCheck() and (axisSelector> len(self)-.01).sum() !=0: raise IndexError('index %d (found in an indices array) is too large, for an axis of length %d' % (max(axisSelector), len(self))) if _doExpensiveCheck() and (axisSelector<-len(self)-.5).sum() !=0: raise IndexError('index %d (found in an indices array) is too small, for an axis of length %d' % (min(axisSelector), len(self))) return garray(self._base_shaped(1).select_columns(axisSelector._base_shaped(axisSelector.ndim), _new_cm((axisSelector.size, self.size/self.shape[0]))), axisSelector.shape + self.shape[1:], None) else: return self.transpose_simple(axisI)[axisSelector].transpose_simple(-axisI) else: return (concatenate(tuple( self[_modifyT(selectors, axisI, slice(choiceOnThisAxis, choiceOnThisAxis+1))] for choiceOnThisAxis in axisSelector.ravel()), axisI) .reshape(self.shape[:axisI] + axisSelector.shape + self.shape[axisI+1:])) if not type(axisSelector) == types.SliceType: raise ValueError('index not understood: %s' % axisSelector) # from here, selector is a simple slice sFrom, sTo, sLen = _read_simple_slice(axisSelector, axisLen) retShape = _modifyT(self.shape, axisI, sLen) if _prodT(retShape)==0: return zeros(retShape) if axisI==0: return garray(_cm_row_slice_read(self._base_shaped(1), sFrom, sTo), retShape, self) # slice on axis 0 is free, using _cm_row_slice_read if axisI!=1: return self.reshape((_prodT(self.shape[:axisI]),) + self.shape[axisI:])[:, sFrom:sTo].reshape(retShape) # redirect: collapse earlier axes into one if self.ndim != 2: return self.reshape_2d(1)[:, sFrom * _prodT(self.shape[axisI+1:]) : sTo * _prodT(self.shape[axisI+1:])].reshape(retShape) # redirect: use long elements chunkSize = int(2e6) nChunks = (len(self) + chunkSize - 1) // chunkSize if nChunks>1: return concatenate( tuple(self[chunkI*chunkSize : (chunkI+1)*chunkSize, sFrom:sTo] for chunkI in range(nChunks)), 0) # redirect in batches, bc cudamat chokes on big jobs, i.e. jobs with many rows if self.shape[0]==1: # then redo as row slice. This also avoids a cudamat limitation (on slicing many columns), sometimes. return self.ravel()[sFrom:sTo][newaxis].copy() # _base case for column slice retCm = _new_cm(retShape) _cm_col_slice_read(self._base_shaped(1), sFrom, sTo, retCm) return garray(retCm, retShape, None)
Example #25
Source File: gnumpy.py From imageqa-public with MIT License | 4 votes |
def __getitem__(self, selectors): selectors = _nonSeqAsS(selectors) for i,sel in enumerate(selectors): # deal with newaxis and ellipsis if sel is Ellipsis: return self[selectors[:i] + (slice(None),)* (self.ndim - (__builtin__.sum( x != None for x in selectors)-1)) + selectors[i+1:]] # sel==Ellipsis is bad when sel is an array if sel is newaxis: return self.reshape(_insertT(self.shape, i, (1,)))[_modifyT(selectors, i, slice(None))] if len(selectors) > self.ndim: raise IndexError('more indices than axes') if _all2_(selectors, _isFullSlice): return self if reduce(operator.and_, ( _isSequence(sel) or is_array(sel) for sel in selectors), True) and len(selectors)>=2: selectors = tuple(map(as_garray, selectors)) if reduce(operator.or_, ( (sel < 0).sum() > 0 for sel in selectors), False): raise NotImplementedError('negative indices in index arrays, combined with having multiple indices arrays') # ravel the first two dimensions into one, and translate the corresponding indices arrays into one accordingly return self.reshape((self.shape[0]*self.shape[1],) + self.shape[2:])[(selectors[0]*self.shape[1]+selectors[1],) + selectors[2:]] if __builtin__.sum( _isSequence(sel) or is_array(sel) for sel in selectors)>1: raise NotImplementedError('slicing with more than one sequence/array among the indices, with also other kinds of values among the indices') # handle the operations on different axes one by one; earlier axes are handled earlier axisI = ( i for i, x in enumerate(selectors) if not _isFullSlice(x)).next() axisLen = self.shape[axisI] axisSelector = selectors[axisI] if not _all2_(selectors[axisI+1:], _isFullSlice): return self[selectors[:axisI+1]][(slice(None),)*(axisI+(not type(axisSelector) in _numberTypes)) + selectors[axisI+1:]] # first select on axisI only; then do the further axes. # from here, axisI is the only axis on which we don't take a full slice if type(axisSelector) == types.SliceType and axisSelector.step not in (1, None): axisSelector = numpy.arange(axisLen)[axisSelector] if type(axisSelector) in _numberTypes: # selecting a single location on axisI, and thus reducing the dimensionality by 1 ret = self[selectors[:axisI] + (_short_slice(_read_single_index(axisSelector, axisLen)),)] .reshape(_deleteT2(self.shape, axisI)) return ( ret.item() if ret.shape==_t0 else ret) # exception, to have the same behavior as numpy if _isSequence(axisSelector) or type(axisSelector) == numpy.ndarray: axisSelector = garray(axisSelector) if isinstance(axisSelector, garray): # a 1d index means re-arranging this axis. I.e. a number of length 1 selections on this axis, concatenated on this axis. # other dimensionality means using the raveled version, and then reshaping to reflect the selector dimensionality if hasattr(_cmType, 'select_columns'): if axisI==0: if _doExpensiveCheck() and (axisSelector> len(self)-.01).sum() !=0: raise IndexError('index %d (found in an indices array) is too large, for an axis of length %d' % (max(axisSelector), len(self))) if _doExpensiveCheck() and (axisSelector<-len(self)-.5).sum() !=0: raise IndexError('index %d (found in an indices array) is too small, for an axis of length %d' % (min(axisSelector), len(self))) return garray(self._base_shaped(1).select_columns(axisSelector._base_shaped(axisSelector.ndim), _new_cm((axisSelector.size, self.size/self.shape[0]))), axisSelector.shape + self.shape[1:], None) else: return self.transpose_simple(axisI)[axisSelector].transpose_simple(-axisI) else: return (concatenate(tuple( self[_modifyT(selectors, axisI, slice(choiceOnThisAxis, choiceOnThisAxis+1))] for choiceOnThisAxis in axisSelector.ravel()), axisI) .reshape(self.shape[:axisI] + axisSelector.shape + self.shape[axisI+1:])) if not type(axisSelector) == types.SliceType: raise ValueError('index not understood: %s' % axisSelector) # from here, selector is a simple slice sFrom, sTo, sLen = _read_simple_slice(axisSelector, axisLen) retShape = _modifyT(self.shape, axisI, sLen) if _prodT(retShape)==0: return zeros(retShape) if axisI==0: return garray(_cm_row_slice_read(self._base_shaped(1), sFrom, sTo), retShape, self) # slice on axis 0 is free, using _cm_row_slice_read if axisI!=1: return self.reshape((_prodT(self.shape[:axisI]),) + self.shape[axisI:])[:, sFrom:sTo].reshape(retShape) # redirect: collapse earlier axes into one if self.ndim != 2: return self.reshape_2d(1)[:, sFrom * _prodT(self.shape[axisI+1:]) : sTo * _prodT(self.shape[axisI+1:])].reshape(retShape) # redirect: use long elements chunkSize = int(2e6) nChunks = (len(self) + chunkSize - 1) // chunkSize if nChunks>1: return concatenate( tuple(self[chunkI*chunkSize : (chunkI+1)*chunkSize, sFrom:sTo] for chunkI in range(nChunks)), 0) # redirect in batches, bc cudamat chokes on big jobs, i.e. jobs with many rows if self.shape[0]==1: # then redo as row slice. This also avoids a cudamat limitation (on slicing many columns), sometimes. return self.ravel()[sFrom:sTo][newaxis].copy() # _base case for column slice retCm = _new_cm(retShape) _cm_col_slice_read(self._base_shaped(1), sFrom, sTo, retCm) return garray(retCm, retShape, None)
Example #26
Source File: gnumpy.py From imageqa-public with MIT License | 4 votes |
def _reduction__base(self, operatorName, axis): if axis==None: return self.ravel()._reduction__base(operatorName, 0).item() if not type(axis) in _numberTypes: raise TypeError('the value %s is not appropriate for the "axis" parameter.' % str(axis)) if axis < -self.ndim or axis>=self.ndim: raise ValueError('axis (%d) out of bounds for an array with %d axes.' % (axis, self.ndim)) axis = int(axis) % self.ndim if self.size==0: retShape = _deleteT2(self.shape, axis) if operatorName=='sum': return zeros(retShape) elif operatorName=='max': return tile(-inf, retShape) else: assert False if operatorName=='max' and axis==0 and cudamatHas('maxAxis0'): # my own fast implementation ret = empty(self.shape[1:]) _ctInt = _cudamat.ct.c_int nThreadsPerBlock = 32 gridX, gridY = ((ret.size+nThreadsPerBlock-1)//nThreadsPerBlock), 1 while gridX>65535: gridY*=2; gridX = (gridX+1)//2; _cudamat._cudamat.maxAxis0.restype = _ctypes.c_int assert 0==_cudamat._cudamat.maxAxis0(_ctInt(gridX), _ctInt(gridY), _ctInt(nThreadsPerBlock), self._base.p_mat, ret._base.p_mat, _ctInt(self.shape[0]), _ctInt(ret.size)) return ret if axis==0 and operatorName=='max': # max over rows is not yet supported in cudamat return self.reshape_2d(1).T.max(1).reshape(self.shape[1:]) if axis==0 and self.ndim==1 and self.size>5000 and operatorName=='sum': # optimization. apparently, cudamat is not maximally efficient. n = int(numpy.sqrt(self.size-1)) return self[:n*n].reshape((n, n))._reduction__base(operatorName, 0)._reduction__base(operatorName, 0) + self[n*n:]._reduction__base(operatorName, 0) if operatorName=='sum': chunkSize = 1024*256 # sum over longer dimensions fails in cudamat nChunks = (self.shape[axis] + chunkSize-1) // chunkSize if nChunks>1: return reduceAdd( self[(slice(None),) * axis + (slice(chunkI*chunkSize, __builtin__.min(self.shape[axis], (chunkI+1)*chunkSize)),)]._reduction__base(operatorName, axis) for chunkI in range(nChunks)) if operatorName=='max' and self.isnan().any2(): # cudamat bug workaround return garray(self.asarray().max(axis)) operatorInCm = {'sum': _cmType.sum, 'max': _cmType.max}[operatorName] if axis==0: return _check_number_types(garray(operatorInCm(self._base_shaped(1), 1, _new_cm(_prodT(self.shape[1:]))), self.shape[1:], None)) if axis==self.ndim-1: if self.ndim!=2: return self.reshape_2d(-1)._reduction__base(operatorName, 1).reshape(self.shape[:-1]) if self.ndim==2: chunkSize = 2**16-1 nChunks = (len(self) + chunkSize-1) // chunkSize if nChunks>1: # cudamat chokes on big arrays, so break it in pieces for cudamat chunks = tuple([ self[chunkI*chunkSize : __builtin__.min((chunkI+1)*chunkSize, len(self))] for chunkI in range(nChunks)]) return concatenate([ chunk._reduction__base(operatorName, 1) for chunk in chunks]) else: # small array return _check_number_types(garray(operatorInCm(self._base_shaped(1), 0, _new_cm((len(self), 1))), (len(self),), None)) return self.transpose_simple(axis)._reduction__base(operatorName, 0).transpose_simple(-axis) # ------------------------------------------------------------------------------- external misc non-numerical
Example #27
Source File: test_multiarray.py From ImageFusion with MIT License | 4 votes |
def test_ufunc_override_rop_simple(self): # Check parts of the binary op overriding behavior in an # explicit test case that is easier to understand. class SomeClass(object): def __numpy_ufunc__(self, *a, **kw): return "ufunc" def __mul__(self, other): return 123 def __rmul__(self, other): return 321 def __gt__(self, other): return "yep" def __lt__(self, other): return "nope" class SomeClass2(SomeClass, ndarray): def __numpy_ufunc__(self, ufunc, method, i, inputs, **kw): if ufunc is np.multiply: return "ufunc" else: inputs = list(inputs) inputs[i] = np.asarray(self) func = getattr(ufunc, method) r = func(*inputs, **kw) if 'out' in kw: return r else: x = SomeClass2(r.shape, dtype=r.dtype) x[...] = r return x arr = np.array([0]) obj = SomeClass() obj2 = SomeClass2((1,), dtype=np.int_) obj2[0] = 9 assert_equal(obj * arr, 123) assert_equal(arr * obj, 321) assert_equal(arr > obj, "nope") assert_equal(arr < obj, "yep") assert_equal(np.multiply(arr, obj), "ufunc") arr *= obj assert_equal(arr, 321) assert_equal(obj2 * arr, 123) assert_equal(arr * obj2, 321) assert_equal(arr > obj2, "nope") assert_equal(arr < obj2, "yep") assert_equal(np.multiply(arr, obj2), "ufunc") arr *= obj2 assert_equal(arr, 321) obj2 += 33 assert_equal(obj2[0], 42) assert_equal(obj2.sum(), 42) assert_(isinstance(obj2, SomeClass2))