|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
-
-
- <div align=center><img src="./picture/01.svg"/></div>
-
- # Edge-Engine
-
- ## Edge : 一个开源的科学计算引擎
-
-
-
- [ ](https://github.com/AllenZYJ/Edge-Computing-Engine/blob/add-license-1/LICENSE)
-
- > 项目开始日期 : 2019/10/01
-
- > 目前项目总代码 : 709 行
- >
- > 测试代码 : 810 行
- >
- > 测试环境:
- >
- > MacBook Pro
- >
- > 编译器环境:
- >
- > Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
- > Apple LLVM version 10.0.1 (clang-1001.0.46.4)
- > Target: x86_64-apple-darwin18.7.0
- > Thread model: posix
- >
- > 目前实现的:
-
- How to install and run the demo:
-
- `git clone git@github.com:AllenZYJ/Edge-Computing-Engine.git`
-
- `cd to this dir `
-
- `g++ main.cpp -o main`
-
- `./main`
-
- Matrix API:
-
- - [x] Matrix read_csv(string &file_path)
- - [x] Create a matrix : create(row,cols)
- - [x] Change the element for matrix void move_ele(int &ele1, int &ele2)
- - [x] Matrix1+Matrix2 : Matrix add(Matrix mid1,Matrix mid2,int flag=1)
- - [x] Flag is how to compete the ele ,default 1 ,bitwise operation(位运算加速).
- - [x] Matrix1-Matrix2 : Matrix subtract(Matrix mid1,Matrix mid2)
- - [x] Matrix1*Matrix2 : Matrix mul(Matrix mid1,Matrix mid2)
- - [x] Matrix1*n : Matrix times_mat(int times,Matrix mid1)
- - [x] Matrix1's Transposition : Matrix get_T(Matrix mid1)
- - [x] Mul(matrix1,matrix2)
- - [x] double* flatten(Matrix mid1) : Return a flattened array.
- - [x] Matrix matrix_rs(Matrix mid1,int rs_row,int rs_col)
- - [x] double matrix_sum(Matrix mid1)
- - [x] double matrix_mean(Matrix mid1)
- - [x] Matrix appply(Matrix mid1,Matrix mid2,int axis = 0)
- - [x] Matrix iloc(Matrix mid1,int start_x=0,int end_x=0,int start_y=0,int end_y=0)
-
- ## Demo: mat*mat
-
- Matrix **A**:
-
- | 第1列 | 第2列 | 第3列 | 第4列 | 第5列 |
- | ------- | ------- | ------- | ------- | ------- |
- | 72.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 64.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 16.0000 | 8.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 56.0000 | 16.0000 | 32.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
-
- MAtrix **B**:
-
- | 第1列 | 第2列 | 第3列 | 第4列 | 第5列 | 第6列 |
- | ------- | ------- | ------- | ------- | ------ | ------ |
- | 72.0000 | 0.0000 | 16.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 64.0000 | 8.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 56.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 16.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 32.0000 | 0.0000 | 0.0000 |
-
- To
-
- | 第1列 | 第2列 | 第3列 | 第4列 | 第5列 | 第6列 |
- | --------- | --------- | --------- | --------- | ------ | ------ |
- | 5184.0000 | 0.0000 | 1152.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 4096.0000 | 512.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 1152.0000 | 512.0000 | 320.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 4416.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
- | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
-
- ## Demo : mat.flatten
-
- double* flatten(Matrix mid1)
-
- | 1 | 2 | 3 |
- | :--: | :--: | :--: |
- | 2 | 4 | 6 |
- | 7 | 8 | 9 |
-
- To
-
- | 1 | 2 | 3 | 2 | 4 | 6 | 7 | 8 | 9 |
- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | :----------------- |
- | | | | | | | | | Like numpy.flatten |
-
- ## Demo : apply nearly mat
-
- Matrix appply(Matrix mid1,Matrix mid2,int axis = 0)
-
- > if axis=0 :
-
- | 0 | 7 | 2 |
- | ---- | ---- | ---- |
- | 0 | 3 | 1 |
- | 0 | 0 | 0 |
- | 0 | 0 | 11 |
- | 0 | 7 | 2 |
- | 0 | 3 | 1 |
- | 0 | 0 | 0 |
- | 0 | 0 | 11 |
- ------
-
- > axis = 1:
-
- | 0 | 7 | 2 | 0 | 7 | 2 |
- | ---- | ---- | ---- | ---- | ---- | ---- |
- | 0 | 3 | 1 | 0 | 3 | 1 |
- | 0 | 0 | 0 | 0 | 0 | 0 |
- | 0 | 0 | 11 | 0 | 0 | 11 |
-
-
-
- - [x] read_csv
-
- - [x] return a matrix
-
- CSV head :
-
- | -0.017612 | 14.053064 | 0 |
- | --------- | --------- | ---- |
- | -1.395634 | 4.662541 | 1 |
- | -0.752157 | 6.53862 | 0 |
- | -1.322371 | 7.152853 | 0 |
- | 0.423363 | 11.054677 | 0 |
- | 0.406704 | 7.067335 | 1 |
-
- Get:
-
- 
-
-
-
- ## Test demo:
-
- ```c
- #include<iostream>
- #include<ctime>
- #include<string>
- #include <time.h>
- #include <math.h>
- #include <fstream>
- #include"./matrix/matrix_def.h"
- #include"./matrix/matrix_pro.h"
- #include"./welcome/score_wel.cpp"
- #include"./logistic/logistic_def.h"
- #include"./file_pro/data_read.h"
- using namespace std;
- clock_t start, stop;
- double duration;
- int main()
- {
- welcome();
- string path = "./new_data2.csv";
- Matrix data = read_csv(path);
- Matrix bais = CreateMatrix(data.row,1);
- data = appply(data,bais,1);
- Matrix y = iloc(data,0,0,3,4);
- Matrix x_1 = iloc(data,0,0,0,3);
- Matrix x_2 = get_T(x_1);
- double alpha = 0.002;
- int max_epoch = 100;
- Matrix weight = CreateMatrix(3,1);
- change_va(weight,0,0,1);
- change_va(weight,1,0,1);
- change_va(weight,2,0,1);
- int epoch = 0;
- for(epoch = 0;epoch<=max_epoch;epoch++)
- {
- cout<<"-----------split-line-----------"<<endl;
- Matrix temp_mul = mul(x_1,weight);
- Matrix h =e_sigmoid(temp_mul);
- Matrix error = subtract(y,h);
- Matrix temp_update = mul(x_2,error);
- Matrix updata = add(weight,times_mat(alpha,temp_update),0);
- cout_mat(weight);
- cout<<"epoch: "<<epoch<<" error: "<<matrix_sum(error)<<endl;
- cout<<"-----------split-line-----------"<<endl;
- }
- stop = clock();
- printf("%f\n", (double)(stop - start) / CLOCKS_PER_SEC);
- return 0;
- }
- ```
- Something :
-
- > 1. Matrix'element is default 1
- > 2. Dynamically allocate memory to prevent matrix from being too large
- > 3. To save memory and delete later, use pointer to open up array space temporarily
- > 4. if free please delete(matrix);
- > 5. Api design like numpy or pandas
- > 6. Talking is cheap u can get the code
- > 7. welcome 🏃watched and star.
- >
-
- ------
-
-
-
- <div align = center><img src = './picture/星月.svg'></div>
-
-
-
- 个人小站:[极度空间](likedge.top)
-
- 作者邮箱:zk@likedge.top | edge@ibooker.org.cn
-
- QQ:2533524298
|