📄 joinbindata.cc
字号:
const char *help = "\progname: joinbindata.cc\n\code2html: This program joins 2 bindata files.\n\version: Torch3 vision2.0, 2004-2005\n\(c) Sebastien Marcel (marcel@idiap.ch)\n";#include "DiskXFile.h"#include "CmdLine.h"using namespace Torch;int main(int argc, char *argv[]){ char *filename_in1; char *filename_in2; char *filename_out; bool average; bool delta; bool diff; bool verbose; CmdLine cmd; cmd.setBOption("write log", false); cmd.info(help); cmd.addText("\nArguments:"); cmd.addSCmdArg("filename in1", &filename_in1, "input bindata filename 1"); cmd.addSCmdArg("filename in2", &filename_in2, "input bindata filename 2"); cmd.addText("\nArguments:"); cmd.addBCmdOption("-verbose", &verbose, false, "verbose"); cmd.addBCmdOption("-diff", &diff, false, "diff"); cmd.addBCmdOption("-delta", &delta, false, "delta"); cmd.addBCmdOption("-average", &average, false, "average"); cmd.addSCmdOption("-o", &filename_out, "join.bindata", "output bindata filename"); cmd.read(argc, argv); DiskXFile *file1 = NULL; DiskXFile *file2 = NULL; DiskXFile *ofile = NULL; int n_patterns1; int n_inputs1; file1 = new DiskXFile(filename_in1, "r"); file1->read(&n_patterns1, sizeof(int), 1); file1->read(&n_inputs1, sizeof(int), 1); if(verbose) { print("Reading bindata file (%s)\n", filename_in1); print(" n_inputs = %d\n", n_inputs1); print(" n_patterns = %d\n", n_patterns1); } int n_patterns2; int n_inputs2; file2 = new DiskXFile(filename_in2, "r"); file2->read(&n_patterns2, sizeof(int), 1); file2->read(&n_inputs2, sizeof(int), 1); if(verbose) { print("Reading bindata file (%s)\n", filename_in2); print(" n_inputs = %d\n", n_inputs2); print(" n_patterns = %d\n", n_patterns2); } if(n_inputs1 != n_inputs2) error("n_inputs different"); int n_patterns; if(average) n_patterns = n_patterns2; else n_patterns = n_patterns1 * n_patterns2; int n_inputs; if(diff) n_inputs = n_inputs1; else n_inputs = n_inputs1+n_inputs2; if(verbose) { print("Writting bindata file (%s)\n", filename_out); print(" n_inputs = %d\n", n_inputs); print(" n_patterns = %d\n", n_patterns); } ofile = new DiskXFile(filename_out, "w"); ofile->write(&n_patterns, sizeof(int), 1); ofile->write(&n_inputs, sizeof(int), 1); real *inputs = new real [n_inputs]; real *mean = new real [n_inputs1]; for(int i = 0 ; i < n_inputs1 ; i++) mean[i] = 0.0; real **inputs1 = new real*[n_patterns1]; for(int p = 0 ; p < n_patterns1 ; p++) { inputs1[p] = new real [n_inputs1]; file1->read(inputs1[p], sizeof(real), n_inputs1); for(int i = 0 ; i < n_inputs1 ; i++) mean[i] += inputs1[p][i]; } for(int i = 0 ; i < n_inputs1 ; i++) mean[i] /= (real) n_patterns1; real **inputs2 = new real*[n_patterns2]; for(int p = 0 ; p < n_patterns2 ; p++) { inputs2[p] = new real [n_inputs2]; file2->read(inputs2[p], sizeof(real), n_inputs2); } if(average) { for(int p2 = 0 ; p2 < n_patterns2 ; p2++) { if(diff) for(int i = 0 ; i < n_inputs ; i++) inputs[i] = inputs2[p2][i] - mean[i]; else { int j = 0; if(delta) for(int i = 0 ; i < n_inputs2 ; i++, j++) inputs[j] = inputs2[p2][i] - mean[i]; else for(int i = 0 ; i < n_inputs2 ; i++, j++) inputs[j] = inputs2[p2][i]; for(int i = 0 ; i < n_inputs1 ; i++, j++) inputs[j] = mean[i]; } ofile->write(inputs, sizeof(real), n_inputs); } } else { for(int p1 = 0 ; p1 < n_patterns1 ; p1++) { for(int p2 = 0 ; p2 < n_patterns2 ; p2++) { if(diff) for(int i = 0 ; i < n_inputs ; i++) inputs[i] = inputs2[p2][i] - inputs1[p1][i]; else { int j = 0; if(delta) for(int i = 0 ; i < n_inputs2 ; i++, j++) inputs[j] = inputs2[p2][i] - inputs1[p1][i]; else for(int i = 0 ; i < n_inputs2 ; i++, j++) inputs[j] = inputs2[p2][i]; for(int i = 0 ; i < n_inputs1 ; i++, j++) inputs[j] = inputs1[p1][i]; } ofile->write(inputs, sizeof(real), n_inputs); } } } for(int p = 0 ; p < n_patterns1 ; p++) delete [] inputs1[p]; delete [] inputs1; for(int p = 0 ; p < n_patterns2 ; p++) delete [] inputs2[p]; delete [] inputs2; delete [] inputs; delete [] mean; delete file1; delete file2; return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -