#include "genenalfunc.h" #include #include using namespace arma; void PrintMat2(QString name, mat& dataMat) { QFile file("C:/Result_Debug3/" + name); if (file.open(QIODevice::WriteOnly)) { QTextStream out(&file); if (dataMat.is_vec()) { for (int i = 0; i < dataMat.size(); ++i) { out << QString::number(dataMat(i), 'g', 10) << "\r\n"; } } else { for (uword row = 0; row < dataMat.n_rows; ++row) { for (uword col = 0; col < dataMat.n_cols; ++col) { out << QString::number(dataMat(row, col), 'g', 10) << "\t"; } out << "\r\n"; } } file.close(); } } mat QVec2ToMat(QVector< QVector > vec2) { mat retMat; if(vec2.size() > 0) { retMat.set_size(vec2[0].size(), vec2.size()); for(int i=0; i= data_size) end = data_size - 1; for(int i=start; i<=end; ++i) { dataMat(i) = valMat(i); } return bRet; } urowvec RangeVec(int start, int end, int span) { urowvec retData; if(span > 0 && start > end) return retData; if(span < 0 && start < end) return retData; int size = floor( (end - start) / span ) + 1; retData.set_size(size); int temp = start; if(span > 0) { for(uword i = 0; temp<=end; temp+=span, ++i) { retData(i) = temp; } } else { for(uword i = 0; temp>=end; temp+=span, ++i) { retData(i) = temp; } } return retData; } rowvec RangeVec2(double start, double end, double span) { rowvec retData; if(span > 0 && start > end) return retData; if(span < 0 && start < end) return retData; int size = floor( (end - start) / span) + 1; retData.set_size(size); double temp = start; if(span > 0) { for(uword i = 0; temp<=end; temp+=span, ++i) { retData(i) = temp; } } else { for(uword i = 0; temp>=end; temp+=span, ++i) { retData(i) = temp; } } return retData; } uvec sortrows(mat& retMat, mat dataMat, int col) { uvec idx; if(col >= dataMat.n_cols || col < 0) col = 0; uword n_row = dataMat.n_rows; idx.set_size(n_row); for(uword i=0; i= 0) { if(start > data_size) start = data_size; if(start < 0) start = 0; if(end > data_size) end = data_size; if(end < 0) end = 0; span = abs(span); if(myData.is_colvec()) { retData.set_size(abs(end-start)/span+1, 1); } else { retData.set_size(1, abs(end-start)/span+1); } if(start <= end) { for(int i=start, j=0; i<=end; i+=span) { retData(j++) = myData(i); } } else { for(int i=start, j=0; i>=end; i-=span) { retData(j++) = myData(i); } } } return retData; } double min(double d1, double d2) { return d1 <= d2 ? d1 : d2; } double min(double d1, double d2, double d3) { double minVal = d1 <= d2 ? d1 : d2; if(minVal > d3) minVal = d3; return minVal; } double max(double d1, double d2) { return d1 >= d2 ? d1 : d2; } double max(double d1, double d2, double d3) { double maxVal = d1 >= d2 ? d1 : d2; if(maxVal < d3) maxVal = d3; return maxVal; } mat max(double val, mat dataMat) { mat retMat = dataMat; for(uword row=0; row val) { retMat(row, col) = val; } } } return retMat; } mat NaNto1(mat dataMat) // @cao { mat retMat = dataMat; for(uword row=0; row pos; for(size_t i=0; i!=idx.size(); ++i) { if(idx(i)) { pos.append(i); } } rowvec ret(pos.size()); for(size_t i = 0; i!= pos.size(); ++i) { ret(i) = row(pos[i]); } return ret; } mat UMatToMat(umat oriMat) { mat retMat(size(oriMat)); for(uword i=0; i 0) iRet = 1; return iRet; }