/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /* * File: matutils.hpp * Author: jens * * Created on 21. Januar 2022, 08:28 */ #ifndef MATUTILS_HPP #define MATUTILS_HPP #include "RnnTextHelper.hpp" #include namespace Matutils { inline void uniform(arma::mat& srcDst, double stdDev=1.0, double mu=0.5) { #if 0 for (size_t i=0; i < srcDst.n_rows; i++) { for (size_t j=0; j < srcDst.n_cols; j++) { srcDst(i, j) = stdDev*(Noise_Uniform(&m_noise) + mu - 0.5); } } #else srcDst = stdDev*(arma::randu(arma::size(srcDst)) + mu - 0.5); #endif } inline arma::mat sample(const arma::mat &src) { arma::mat rand = src; uniform(rand); #if 0 for (size_t i=0; i < src.n_rows; i++) { for (size_t j=0; j < src.n_cols; j++) { dst(i, j) = src(i, j) >= dst(i, j); } } return dst; #else arma::umat res = (src > rand); return arma::conv_to::from(res); #endif } inline arma::mat normalize(const arma::mat& src) { std::cout << "Normalizing Training Data ..." << std::endl; // Dim = 0: Normalize over training all training pattern // Dim = 1: Normalize over single training pattern double k = 1; size_t dim = 0; arma::mat mean = arma::mean(src, dim); arma::mat stddev = arma::stddev(src, 0, dim); arma::mat mean_mat; arma::mat std_mat; if (dim==0) { mean_mat = arma::repmat(mean, src.n_rows, 1); std_mat = arma::repmat(stddev, src.n_rows, 1); } else { mean_mat = arma::repmat(mean, 1, src.n_cols); std_mat = arma::repmat(stddev, 1, src.n_cols); } arma::mat xn = src - mean_mat; arma::mat y = xn/(std_mat + 1e-9); std::cout << "mean" << " : " << std::endl << arma::mean(y, dim) << std::endl; std::cout << "stddev" << ": " << std::endl << arma::stddev(y, 0, dim) << std::endl; return y; } inline arma::mat char2vec(char c, size_t len) { arma::mat result = arma::zeros(1, len); int idx = RnnTextHelper::ch2idx(c); result[idx] = 1; return result; } inline char vec2char(arma::mat const &vec) { char result = RnnTextHelper::idx2ch(vec.index_max()); return result; } } #endif /* MATUTILS_HPP */