#ifndef h_additions_ #define h_additions_ // -*- C++ -*- // Copyright 2006 Deutsches Forschungszentrum fuer Kuenstliche Intelligenz // or its licensors, as applicable. // Copyright 1995-2008 Thomas M. Breuel. // // You may not use this file except under the terms of the accompanying license. // // Licensed under the Apache License, Version 2.0 (the "License"); you // may not use this file except in compliance with the License. You may // obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Project: additions to colib functions // File: additions.h // Purpose: new (existing?) functions for narray // Responsible: rangoni // Reviewer: // Primary Repository: // Web Sites: www.iupr.org, www.dfki.de #include "io_png.h" #include "narray.h" using namespace colib; using namespace iulib; namespace additions { template // Hagen bool valid(T &v) { for(int i=0;i inline bool is_valid(narray &a) { for(int i=0;i inline void print(narray &a, const char* format = "%g ") { printf("["); if(a.rank()==1) { for(int i=0;i inline void print(objlist > &o) { printf("["); for(int i=0;i T rowsum(narray &values, int i) { CHECK_ARG(values.rank()==2); T sum = 0.; for(int j=0;j T colsum(narray &values, int j) { CHECK_ARG(values.rank()==2); T sum = 0.; for(int i=0;i void colmul(narray &values, int j, S cste) { CHECK_ARG(values.rank()==2); for(int i=0;i void rowmul(narray &values, int i, S cste) { CHECK_ARG(values.rank()==2); for(int j=0;j int colargmax(narray &values, int i) { CHECK_ARG(values.rank()==2); if(values.dim(1)<1) return -1; int mj = 0; T mv = values(0,i); for(int j=1;j T &colmax(narray &values, int j) { CHECK_ARG(values.rank()==2); return values(colargmax(values,j),j); } template int colargmin(narray &values, int i) { CHECK_ARG(values.rank()==2); if(values.dim(1)<1) return -1; int mj = 0; T mv = values(0,i); for(int j=1;jmv) continue; mv = value; mj = j; } return mj; } template T &colmin(narray &values, int j) { CHECK_ARG(values.rank()==2); return values(colargmin(values,j),j); } template void col_add(narray &out, narray &vector) { CHECK_ARG(out.rank()==2&&vector.rank()==1); CHECK_ARG(out.dim(0)==vector.dim(0)); for(int j=0;j void row_add(narray &out, int l, narray &vector) { CHECK_ARG(out.rank()==2&&vector.rank()==1); CHECK_ARG(l inline void sum(narray &out, narray &in) { CHECK_ARG(out.rank()==2&&in.rank()==2); CHECK_ARG(out.dim(0)==in.dim(0)&&in.dim(1)==out.dim(1)); for(int i=0;i inline void colmax_a(narray &out, narray &in) { CHECK_ARG(in.rank()==2); out.resize(in.dim(1)); for(int i=0;i inline void colmin_a(narray &out, narray &in) { CHECK_ARG(in.rank()==2); out.resize(in.dim(1)); for(int i=0;i inline bool is_almost_null(narray &array, T epsilon) { for(int i=0;i=epsilon) return false; return true; } template void multiply(narray &out, narray &in1, objlist &in2) { CHECK_ARG(out.rank()==2); CHECK_ARG(in1.dim(1)==in2.length()); out.resize(in1.dim(0),in2[0].dim(0)); T s = 0.; for(int i=0;i void multiply2(narray &out, narray &in1, int w, narray &in2) { //CHECK_ARG(out.rank()==2); // resize is done in function CHECK_ARG(in2.rank()==1); CHECK_ARG(w < in1.dim(0)); CHECK_ARG(in1.dim(1)==in2.dim(0)); out.resize(in1.dim(1)); T s = 0.; for(int i=0;i void maximum(narray &out, S cste) { for(int i=0;i T maximum_value(narray &in) { T max_v = in.at1d(0); for(int i=1;i void map_function(colib::narray &out, T (*fun)(T)) { for(int i=0;i void add(colib::narray &out, T v) { for(int i=0;i static inline int init_series_s(narray &array1D, const char* string) { unsigned int i,n=0; //skip extra whites at the beginning of the string while (*string == ' ' || *string == '\t') string++; //count number of doubles for (i=0;i &vectors,doublearray &stdev, doublearray &m_x); void apply_normalize(objlist &vectors, doublearray &stdev, doublearray &m_x); void unapply_normalize(objlist &vectors, doublearray &stdev, doublearray &m_x); void unapply_normalize(floatarray &vectors, doublearray &stdev, doublearray &m_x); void save_char(bytearray &image, const char* filename); void write(FILE* stream, floatarray &input); void read(floatarray &output, FILE* stream); } #endif