void testMatrixMulti(void) { int **matrixA, **matrixB; int **matrixResult; int rowNumOfA, colNumOfA; int rowNumOfB, colNumOfB; int rowNumOfR, colNumOfR; rowNumOfA = 2; colNumOfA = 3; rowNumOfB = 3; colNumOfB = 2; matrixA = generateMatrix(rowNumOfA, colNumOfA); matrixB = generateMatrix(rowNumOfB, colNumOfB); matrixResult = make2DArray(rowNumOfA, colNumOfA); printf("----------- test: matrix multiplication ------------------\n"); if(!matrixMulti(matrixResult, matrixA, rowNumOfA, colNumOfA, matrixB, rowNumOfB, colNumOfB)) { printf("matrixA\n"); printMatrix(matrixA, rowNumOfA, colNumOfA); printf("matrixB\n"); printMatrix(matrixB, rowNumOfB, colNumOfB); printf("matrixResult = matrixA x matrixB\n"); rowNumOfR = rowNumOfA; colNumOfR = colNumOfB; printMatrix(matrixResult, rowNumOfR, colNumOfR); } else printf("Fail to matrix multiplication\n"); }
PyObject *computeCov(PyObject *i_funGetData , PyObject *i_funHasMoreData , PyObject *i_colMeans , double i_chunkSize , double dimData) { PyObject *o_covMat = NULL, *chunkCovMat = NULL; PyArrayObject *chunk = NULL; PyArrayObject *covArr = NULL; //PyArrayObject *retval = NULL; //bool moreData; double tmp; int whileIter = 0; while (call_funHasMoreData(i_funHasMoreData)) { whileIter++; if (1 == whileIter) { chunk = call_funGetData(i_funGetData, i_chunkSize); o_covMat = computeChunkCov(chunk, i_colMeans); } if (1 != whileIter) { chunk = call_funGetData(i_funGetData, i_chunkSize); chunkCovMat = computeChunkCov(chunk, i_colMeans); o_covMat = addMatrixPiecewise(o_covMat, chunkCovMat); } } covArr = (PyArrayObject*)PyArray_FROM_OTF(o_covMat, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); tmp = 1.0 / (dimData - 1.0); o_covMat = matrixMulti(covArr, tmp); covArr = (PyArrayObject*)PyArray_FROM_OTF(o_covMat, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); o_covMat = computeFullMatrix(covArr); //o_covMat = tmp * covArr; return o_covMat; //Py_BuildValue("O", o_covMat); }
int GzPushMatrix(GzRender *render, GzMatrix matrix) { /* - push a matrix onto the Ximage stack - check for stack overflow */ if (render->matlevel == MATLEVELS - 1) return GZ_FAILURE; if (render->matlevel == 0) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) render->Ximage[render->matlevel][i][j] = matrix[i][j]; } } else { matrixMulti(render->Ximage[render->matlevel - 1], matrix, render->Ximage[render->matlevel]); } render->matlevel++; return GZ_SUCCESS; }