This commit is contained in:
sunwen
2023-06-08 15:25:05 +08:00
2 changed files with 56 additions and 0 deletions

View File

@@ -1163,6 +1163,58 @@ namespace Aurora {
return Matrix::New(ret, matrix.getDimSize(0), matrix.getDimSize(1), matrix.getDimSize(2));
}
Matrix Matrix::operator!=(double aScalar) const {
if (isComplex()) {
std::cerr << "Complex cann't compare!" << std::endl;
return Matrix();
}
Eigen::Map<Eigen::VectorXd> v(getData(), getDataSize());
double *ret = malloc(getDataSize());
Eigen::Map<Eigen::VectorXd> result(ret, getDataSize());
result.setConstant(0.0);
result = (v.array() != aScalar).select(1.0, result);
return New(ret, getDimSize(0), getDimSize(1), getDimSize(2));
}
Matrix operator!=(double aScalar, const Matrix &matrix) {
if (matrix.isComplex()) {
std::cerr << "Complex cann't compare!" << std::endl;
return Matrix();
}
Eigen::Map<Eigen::VectorXd> v(matrix.getData(), matrix.getDataSize());
double *ret = malloc(matrix.getDataSize());
Eigen::Map<Eigen::VectorXd> result(ret, matrix.getDataSize());
result.setConstant(0.0);
result = (aScalar != v.array() ).select(1.0, result);
return Matrix::New(ret, matrix.getDimSize(0), matrix.getDimSize(1), matrix.getDimSize(2));
}
Matrix Matrix::operator!=(const Matrix &matrix) const {
if (isComplex() || matrix.isComplex()) {
std::cerr << "Complex cann't compare!" << std::endl;
return Matrix();
}
if (!compareShape(matrix) && !isScalar() && !matrix.isScalar()) {
std::cerr << "Matrix not equal, matrix 1(" << matrix.getDimSize(0) << "," << matrix.getDimSize(1) << ","
<< matrix.getDimSize(2) << "), matrix 2(" << getDimSize(0) << "," << getDimSize(1) << ","
<< getDimSize(2) << ")" << std::endl;
return Matrix();
}
if(isScalar()){
return getData()[0]!=matrix;
}
if(matrix.isScalar()){
return (*this)!=matrix.getData()[0];
}
Eigen::Map<Eigen::VectorXd> v(getData(), getDataSize());
Eigen::Map<Eigen::VectorXd> v2(matrix.getData(), matrix.getDataSize());
double *ret = malloc(matrix.getDataSize());
Eigen::Map<Eigen::VectorXd> result(ret, matrix.getDataSize());
result.setConstant(0.0);
result = (v.array() != v2.array()).select(1.0, result);
return Matrix::New(ret, matrix.getDimSize(0), matrix.getDimSize(1), matrix.getDimSize(2));
}
Matrix operator-(Matrix &&aMatrix) {
int size = aMatrix.getDataSize()*aMatrix.getValueType();
double zero = 0.0;

View File

@@ -169,6 +169,10 @@ namespace Aurora {
friend Matrix operator==(double aScalar, const Matrix &matrix);
Matrix operator==(const Matrix &matrix) const;
Matrix operator!=(double aScalar) const;
friend Matrix operator!=(double aScalar, const Matrix &matrix);
Matrix operator!=(const Matrix &matrix) const;
// sub
double& operator[](size_t index);
double operator[](size_t index) const;