@@ -39,7 +39,7 @@ paddle_error paddle_matrix_destroy(paddle_matrix mat) {
39
39
40
40
paddle_error paddle_matrix_set_row (paddle_matrix mat,
41
41
uint64_t rowID,
42
- pd_real * rowArray) {
42
+ paddle_real * rowArray) {
43
43
if (mat == nullptr ) return kPD_NULLPTR ;
44
44
auto ptr = cast (mat);
45
45
if (ptr->mat == nullptr ) return kPD_NULLPTR ;
@@ -56,7 +56,7 @@ paddle_error paddle_matrix_set_row(paddle_matrix mat,
56
56
57
57
paddle_error paddle_matrix_get_row (paddle_matrix mat,
58
58
uint64_t rowID,
59
- pd_real ** rawRowBuffer) {
59
+ paddle_real ** rawRowBuffer) {
60
60
if (mat == nullptr ) return kPD_NULLPTR ;
61
61
auto ptr = cast (mat);
62
62
if (ptr->mat == nullptr ) return kPD_NULLPTR ;
@@ -78,3 +78,46 @@ paddle_error paddle_matrix_get_shape(paddle_matrix mat,
78
78
return kPD_NO_ERROR ;
79
79
}
80
80
}
81
+
82
+ paddle_matrix paddle_matrix_create_sparse (
83
+ uint64_t height, uint64_t width, uint64_t nnz, bool isBinary, bool useGpu) {
84
+ auto ptr = new paddle::capi::CMatrix ();
85
+ ptr->mat = paddle::Matrix::createSparseMatrix (
86
+ height,
87
+ width,
88
+ nnz,
89
+ isBinary ? paddle::NO_VALUE : paddle::FLOAT_VALUE,
90
+ paddle::SPARSE_CSR,
91
+ false ,
92
+ useGpu);
93
+ return ptr;
94
+ }
95
+
96
+ paddle_error paddle_matrix_sparse_copy_from (paddle_matrix mat,
97
+ int * rowArray,
98
+ uint64_t rowSize,
99
+ int * colArray,
100
+ uint64_t colSize,
101
+ float * valueArray,
102
+ uint64_t valueSize) {
103
+ if (mat == nullptr ) return kPD_NULLPTR ;
104
+ auto ptr = cast (mat);
105
+ if (rowArray == nullptr || colArray == nullptr ||
106
+ (valueSize != 0 && valueArray == nullptr ) || ptr->mat == nullptr ) {
107
+ return kPD_NULLPTR ;
108
+ }
109
+ if (auto sparseMat = dynamic_cast <paddle::CpuSparseMatrix*>(ptr->mat .get ())) {
110
+ std::vector<int > row (rowSize);
111
+ row.assign (rowArray, rowArray + rowSize);
112
+ std::vector<int > col (colSize);
113
+ col.assign (colArray, colArray + colSize);
114
+ std::vector<paddle_real> val (valueSize);
115
+ if (valueSize) {
116
+ val.assign (valueArray, valueArray + valueSize);
117
+ }
118
+ sparseMat->copyFrom (row, col, val);
119
+ return kPD_NO_ERROR ;
120
+ } else {
121
+ return kPD_NOT_SUPPORTED ;
122
+ }
123
+ }
0 commit comments