values_t operator/(const TYPE a, const values_t& b) { values_t result(b.size()); for(unsigned int i=0; i<b.size(); i++){ result[i] = a/b[i]; } return result; }
values_t operator+(const values_t& a, const values_t& b) { #ifndef OPTIMIZED if(a.size() != b.size()) throw "Vector addition error: wrong sizes!"; #endif values_t result(a.size()); for(unsigned int i=0; i<a.size(); i++){ result[i] = a[i]+b[i]; } return result; }
void Neuron::feed(const values_t& input) { #ifndef OPTIMIZED if(input.size() != connections.size()){ throw "Invalid fire sizes!"; } #endif value = bias; for(int i=0; i<input.size(); i++){ value += input[i] * connections[i]; } }
TYPE sum(const values_t& a) { TYPE sum = 0.0; for(unsigned int i=0; i<a.size(); i++){ sum += a[i]; } return sum; }
TYPE abs(const values_t& a) { TYPE sum = 0.0; for(unsigned int i=0; i<a.size(); i++){ sum += a[i]*a[i]; } return sqrt(sum); }
void print(values_t& v) { for(unsigned int i=0; i<v.size(); i++) printf("%.5f ", v[i]); printf("\n"); }