1# cython: embedsignature=True 2 3import numpy as np 4cimport numpy as np 5 6 7cdef class CyCoinPackedMatrix: 8 ''' 9 ``CyCoinPackedMatrix`` interfaces ``CoinPackedMatrix`` 10 11 **Usage Example** 12 13 >>> import numpy as np 14 >>> from cylp.cy import CyCoinPackedMatrix 15 >>> rows = np.array([1, 3, 4], np.int32) 16 >>> cols = np.array([0, 2, 1], np.int32) 17 >>> elements = np.array([1.5, -1, 2]) 18 >>> # colOrdered is True if we store the matrix by column (csc) 19 >>> m = CyCoinPackedMatrix(colOrdered=True, rowIndices=rows, 20 ... colIndices=cols, elements=elements) 21 >>> m.majorDim 22 3 23 >>> m.minorDim 24 5 25 ''' 26 def __cinit__(self, colOrdered=True, 27 np.ndarray[np.int32_t, ndim=1] rowIndices=None, 28 np.ndarray[np.int32_t, ndim=1] colIndices=None, 29 np.ndarray[np.double_t, ndim=1] elements=None): 30 if rowIndices is None: 31 self.CppSelf = new_CppCoinPackedMatrix() 32 else: 33 self.CppSelf = new CppCoinPackedMatrix(colOrdered, 34 <int*>rowIndices.data, 35 <int*> colIndices.data, 36 <double*> elements.data, 37 len(rowIndices)) 38 39 property indices: 40 def __get__(self): 41 return <object>self.CppSelf.np_getIndices() 42 43 property elements: 44 def __get__(self): 45 return <object>self.CppSelf.np_getElements() 46 47 property vectorStarts: 48 def __get__(self): 49 return <object>self.CppSelf.np_getVectorStarts() 50 51 #cpdef reserve(self, n): 52 # self.CppSelf.reserve(n) 53 54 property nElements: 55 def __get__(self): 56 return self.CppSelf.getNumElements() 57 58 property majorDim: 59 def __get__(self): 60 return self.CppSelf.getMajorDim() 61 62 property minorDim: 63 def __get__(self): 64 return self.CppSelf.getMinorDim() 65 66 property isColOrdered: 67 def __get__(self): 68 return self.CppSelf.isColOrdered() 69 70 def reserve(self, newMaxMajorDim, newMaxSize, create=0): 71 self.CppSelf.reserve(newMaxMajorDim, newMaxSize, create) 72 73 def appendRow(self, np.ndarray[np.int32_t, ndim=1] vecInd=None, 74 np.ndarray[np.double_t, ndim=1] elements=None): 75 76 cdef int* i 77 cdef double* d 78 if vecInd: 79 self.CppSelf.appendRow(len(elements), <int*>vecInd.data, 80 <double*>elements.data) 81 else: 82 self.CppSelf.appendRow(0, i, d) 83 84 def appendCol(self, np.ndarray[np.int32_t, ndim=1] vecInd=None, 85 np.ndarray[np.double_t, ndim=1] elements=None): 86 87 cdef int* i 88 cdef double* d 89 if vecInd: 90 self.CppSelf.appendCol(len(elements), <int*>vecInd.data, 91 <double*>elements.data) 92 else: 93 self.CppSelf.appendCol(0, i, d) 94 95 def dumpMatrix(self, char* s): 96 #if s: 97 self.CppSelf.dumpMatrix(s) 98 #else: 99 # self.CppSelf.dumpMatrix(s) 100 101 def hasGaps(self): 102 return self.CppSelf.hasGaps() 103 104 def removeGaps(self, removeValue=-1.0): 105 self.CppSelf.removeGaps(removeValue) 106 107 #def __getitem__(self, n): 108 # return self.CppSelf.getItem(n) 109 110 #def __setitem__(self, key, value): 111 # self.CppSelf.setItem(key, value) 112