public unsafe static MatrixC operator /(Complex val, MatrixC mat) { var result = new MatrixC(mat.NumRows, mat.NumCols); Complex *pResult = result.Data; Complex *pMat = mat.Data; for (int i = 0; i < result.TotalSize; i++) { pResult[i] = val / pMat[i]; } return(result); }
private unsafe static MatrixC MultiplyByValue(MatrixC mat, Complex val) { var result = new MatrixC(mat.NumRows, mat.NumCols); Complex *pResult = result.Data; Complex *pMat = mat.Data; for (int i = 0; i < result.TotalSize; i++) { pResult[i] = pMat[i] * val; } return(result); }
public unsafe static MatrixC operator /(MatrixC mat1, MatrixC mat2) { var result = new MatrixC(mat1.NumRows, mat1.NumCols); Complex *pResult = result.Data; Complex *pMat1 = mat1.Data; Complex *pMat2 = mat2.Data; for (int i = 0; i < result.TotalSize; i++) { pResult[i] = pMat1[i] / pMat2[i]; } return(result); }
/// <summary> /// Computes the product of the current matrix and another matrix. /// </summary> /// <param name="mat">A matrix by which to multiply the current matrix.</param> /// <returns>A matrix that is the product of the input matrix and the other matrix.</returns> public unsafe MatrixC Dot(MatrixC mat) { var result = new MatrixC(this.NumRows, mat.NumCols); Complex *pResult = result.Data; Complex *pThis = this.Data; Complex *pMat = mat.Data; for (int y = 0; y < this.NumRows; y++) { int i = y * this.NumCols; for (int x = 0; x < mat.NumCols; x++) { int j = x; var sum = new Complex(); for (int z = 0; z < this.NumCols; z++, j += mat.NumCols) { sum += pThis[i + z] * pMat[j]; } pResult[y * mat.NumCols + x] = sum; } } return(result); }