ryoaro ohara
/
c95_AIchip
AIチップをmbedから駆動するためのプログラムです.
matrix_const.hpp@1:18e8ead6f188, 2019-03-16 (annotated)
- Committer:
- toriten1024
- Date:
- Sat Mar 16 14:54:57 2019 +0000
- Revision:
- 1:18e8ead6f188
mbed_fest 2019 spring Nagoya ; Neural Network demo code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
toriten1024 | 1:18e8ead6f188 | 1 | #include "mbed.h" |
toriten1024 | 1:18e8ead6f188 | 2 | |
toriten1024 | 1:18e8ead6f188 | 3 | #ifndef INCLUDE_CONST_MATRIX |
toriten1024 | 1:18e8ead6f188 | 4 | #define INCLUDE_CONST_MATRIX |
toriten1024 | 1:18e8ead6f188 | 5 | |
toriten1024 | 1:18e8ead6f188 | 6 | namespace mat |
toriten1024 | 1:18e8ead6f188 | 7 | { |
toriten1024 | 1:18e8ead6f188 | 8 | int hogehoge; |
toriten1024 | 1:18e8ead6f188 | 9 | |
toriten1024 | 1:18e8ead6f188 | 10 | class ConstMatrix |
toriten1024 | 1:18e8ead6f188 | 11 | { |
toriten1024 | 1:18e8ead6f188 | 12 | |
toriten1024 | 1:18e8ead6f188 | 13 | public: |
toriten1024 | 1:18e8ead6f188 | 14 | const unsigned int *data; |
toriten1024 | 1:18e8ead6f188 | 15 | int height;//if height == 0 then dimension y is zero |
toriten1024 | 1:18e8ead6f188 | 16 | int width;// |
toriten1024 | 1:18e8ead6f188 | 17 | int channel;// |
toriten1024 | 1:18e8ead6f188 | 18 | int insert_index;// |
toriten1024 | 1:18e8ead6f188 | 19 | |
toriten1024 | 1:18e8ead6f188 | 20 | |
toriten1024 | 1:18e8ead6f188 | 21 | |
toriten1024 | 1:18e8ead6f188 | 22 | //assert |
toriten1024 | 1:18e8ead6f188 | 23 | void assert(int flag){ |
toriten1024 | 1:18e8ead6f188 | 24 | if(! flag){ |
toriten1024 | 1:18e8ead6f188 | 25 | printf("error has happend\n\r"); |
toriten1024 | 1:18e8ead6f188 | 26 | } |
toriten1024 | 1:18e8ead6f188 | 27 | } |
toriten1024 | 1:18e8ead6f188 | 28 | /****************************************************************************************** |
toriten1024 | 1:18e8ead6f188 | 29 | * Calcrate index from x,y,x axis |
toriten1024 | 1:18e8ead6f188 | 30 | * ***************************************************************************************/ |
toriten1024 | 1:18e8ead6f188 | 31 | int calc_pos(int x, int y, int d) |
toriten1024 | 1:18e8ead6f188 | 32 | { |
toriten1024 | 1:18e8ead6f188 | 33 | int pos = 0; |
toriten1024 | 1:18e8ead6f188 | 34 | pos += d * (width * height); |
toriten1024 | 1:18e8ead6f188 | 35 | pos += y * width; |
toriten1024 | 1:18e8ead6f188 | 36 | pos += x; |
toriten1024 | 1:18e8ead6f188 | 37 | return pos; |
toriten1024 | 1:18e8ead6f188 | 38 | } |
toriten1024 | 1:18e8ead6f188 | 39 | |
toriten1024 | 1:18e8ead6f188 | 40 | // Constructor Create Matrix Instance |
toriten1024 | 1:18e8ead6f188 | 41 | void initialize(int width, int height, int channel) |
toriten1024 | 1:18e8ead6f188 | 42 | { |
toriten1024 | 1:18e8ead6f188 | 43 | assert(channel > 0 && height > 0 && width > 0); |
toriten1024 | 1:18e8ead6f188 | 44 | this->channel = channel; |
toriten1024 | 1:18e8ead6f188 | 45 | this->height = height; |
toriten1024 | 1:18e8ead6f188 | 46 | this->width = width; |
toriten1024 | 1:18e8ead6f188 | 47 | this->insert_index = 0; |
toriten1024 | 1:18e8ead6f188 | 48 | } |
toriten1024 | 1:18e8ead6f188 | 49 | |
toriten1024 | 1:18e8ead6f188 | 50 | /****************************************************************************************** |
toriten1024 | 1:18e8ead6f188 | 51 | * Create 1D Matrix data, like a vector |
toriten1024 | 1:18e8ead6f188 | 52 | * args |
toriten1024 | 1:18e8ead6f188 | 53 | * width vector length |
toriten1024 | 1:18e8ead6f188 | 54 | * ***************************************************************************************/ |
toriten1024 | 1:18e8ead6f188 | 55 | ConstMatrix(int width) |
toriten1024 | 1:18e8ead6f188 | 56 | { |
toriten1024 | 1:18e8ead6f188 | 57 | assert(width > 0); |
toriten1024 | 1:18e8ead6f188 | 58 | initialize(width, 1, 1); |
toriten1024 | 1:18e8ead6f188 | 59 | } |
toriten1024 | 1:18e8ead6f188 | 60 | /****************************************************************************************** |
toriten1024 | 1:18e8ead6f188 | 61 | * Create 2D Matrix data |
toriten1024 | 1:18e8ead6f188 | 62 | * args |
toriten1024 | 1:18e8ead6f188 | 63 | * width : matrix width |
toriten1024 | 1:18e8ead6f188 | 64 | * height : matrix height |
toriten1024 | 1:18e8ead6f188 | 65 | * ***************************************************************************************/ |
toriten1024 | 1:18e8ead6f188 | 66 | ConstMatrix(int width, int height) |
toriten1024 | 1:18e8ead6f188 | 67 | { |
toriten1024 | 1:18e8ead6f188 | 68 | assert(width > 0 && height > 0); |
toriten1024 | 1:18e8ead6f188 | 69 | initialize(width, height, 1); |
toriten1024 | 1:18e8ead6f188 | 70 | } |
toriten1024 | 1:18e8ead6f188 | 71 | |
toriten1024 | 1:18e8ead6f188 | 72 | /****************************************************************************************** |
toriten1024 | 1:18e8ead6f188 | 73 | * Create 3D Matrix data |
toriten1024 | 1:18e8ead6f188 | 74 | * args |
toriten1024 | 1:18e8ead6f188 | 75 | * width : matrix width |
toriten1024 | 1:18e8ead6f188 | 76 | * height : matrix height |
toriten1024 | 1:18e8ead6f188 | 77 | * channel : matrix channel, in other word matrix depth |
toriten1024 | 1:18e8ead6f188 | 78 | * ***************************************************************************************/ |
toriten1024 | 1:18e8ead6f188 | 79 | ConstMatrix(int width, int height, int channel) |
toriten1024 | 1:18e8ead6f188 | 80 | { |
toriten1024 | 1:18e8ead6f188 | 81 | assert(width > 0 && height > 0 && channel > 0); |
toriten1024 | 1:18e8ead6f188 | 82 | initialize(width, height, channel); |
toriten1024 | 1:18e8ead6f188 | 83 | } |
toriten1024 | 1:18e8ead6f188 | 84 | |
toriten1024 | 1:18e8ead6f188 | 85 | |
toriten1024 | 1:18e8ead6f188 | 86 | |
toriten1024 | 1:18e8ead6f188 | 87 | |
toriten1024 | 1:18e8ead6f188 | 88 | /****************************************************************************************** |
toriten1024 | 1:18e8ead6f188 | 89 | * Opt out Matrix datas |
toriten1024 | 1:18e8ead6f188 | 90 | * ***************************************************************************************/ |
toriten1024 | 1:18e8ead6f188 | 91 | void show(void) |
toriten1024 | 1:18e8ead6f188 | 92 | { |
toriten1024 | 1:18e8ead6f188 | 93 | for (int i = 0; i < this->channel; i++) |
toriten1024 | 1:18e8ead6f188 | 94 | { |
toriten1024 | 1:18e8ead6f188 | 95 | if (i > 1){ |
toriten1024 | 1:18e8ead6f188 | 96 | printf("channel %d",i); |
toriten1024 | 1:18e8ead6f188 | 97 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 98 | } |
toriten1024 | 1:18e8ead6f188 | 99 | printf("["); |
toriten1024 | 1:18e8ead6f188 | 100 | for (int j = 0; j < this->height; j++) |
toriten1024 | 1:18e8ead6f188 | 101 | { |
toriten1024 | 1:18e8ead6f188 | 102 | printf("["); |
toriten1024 | 1:18e8ead6f188 | 103 | for (int k = 0; k < this->width; k++) |
toriten1024 | 1:18e8ead6f188 | 104 | { |
toriten1024 | 1:18e8ead6f188 | 105 | int ptr = (i * this->width * this->height) + (j * this->width) + k; |
toriten1024 | 1:18e8ead6f188 | 106 | Fix18 tmp(data[ptr]); |
toriten1024 | 1:18e8ead6f188 | 107 | printf("%F ",(double)tmp.to_double()); |
toriten1024 | 1:18e8ead6f188 | 108 | } |
toriten1024 | 1:18e8ead6f188 | 109 | printf("]"); |
toriten1024 | 1:18e8ead6f188 | 110 | if (j < this->height - 1) |
toriten1024 | 1:18e8ead6f188 | 111 | { |
toriten1024 | 1:18e8ead6f188 | 112 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 113 | } |
toriten1024 | 1:18e8ead6f188 | 114 | } |
toriten1024 | 1:18e8ead6f188 | 115 | printf("]"); |
toriten1024 | 1:18e8ead6f188 | 116 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 117 | } |
toriten1024 | 1:18e8ead6f188 | 118 | } |
toriten1024 | 1:18e8ead6f188 | 119 | /****************************************************************************************** |
toriten1024 | 1:18e8ead6f188 | 120 | * Opt out Matrix datas in 1/0 |
toriten1024 | 1:18e8ead6f188 | 121 | * ***************************************************************************************/ |
toriten1024 | 1:18e8ead6f188 | 122 | void show_bin(void) |
toriten1024 | 1:18e8ead6f188 | 123 | { |
toriten1024 | 1:18e8ead6f188 | 124 | for (int i = 0; i < this->channel; i++) |
toriten1024 | 1:18e8ead6f188 | 125 | { |
toriten1024 | 1:18e8ead6f188 | 126 | if (i > 1){ |
toriten1024 | 1:18e8ead6f188 | 127 | printf("channel %d",i ); |
toriten1024 | 1:18e8ead6f188 | 128 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 129 | } |
toriten1024 | 1:18e8ead6f188 | 130 | printf("["); |
toriten1024 | 1:18e8ead6f188 | 131 | for (int j = 0; j < this->height; j++) |
toriten1024 | 1:18e8ead6f188 | 132 | { |
toriten1024 | 1:18e8ead6f188 | 133 | printf("["); |
toriten1024 | 1:18e8ead6f188 | 134 | for (int k = 0; k < this->width; k++) |
toriten1024 | 1:18e8ead6f188 | 135 | { |
toriten1024 | 1:18e8ead6f188 | 136 | int ptr = (i * this->width * this->height) + (j * this->width) + k; |
toriten1024 | 1:18e8ead6f188 | 137 | printf(" %d",((data[ptr] > 0) ? 1 : 0)); |
toriten1024 | 1:18e8ead6f188 | 138 | } |
toriten1024 | 1:18e8ead6f188 | 139 | printf("]"); |
toriten1024 | 1:18e8ead6f188 | 140 | if (j < this->height - 1) |
toriten1024 | 1:18e8ead6f188 | 141 | { |
toriten1024 | 1:18e8ead6f188 | 142 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 143 | } |
toriten1024 | 1:18e8ead6f188 | 144 | } |
toriten1024 | 1:18e8ead6f188 | 145 | printf("]"); |
toriten1024 | 1:18e8ead6f188 | 146 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 147 | } |
toriten1024 | 1:18e8ead6f188 | 148 | } |
toriten1024 | 1:18e8ead6f188 | 149 | |
toriten1024 | 1:18e8ead6f188 | 150 | /****************************************************************************************** |
toriten1024 | 1:18e8ead6f188 | 151 | * opt out Matrix Dimensions Lengths |
toriten1024 | 1:18e8ead6f188 | 152 | * ***************************************************************************************/ |
toriten1024 | 1:18e8ead6f188 | 153 | void shape(void) |
toriten1024 | 1:18e8ead6f188 | 154 | { |
toriten1024 | 1:18e8ead6f188 | 155 | if (this->height == 0 || this->channel == 0) |
toriten1024 | 1:18e8ead6f188 | 156 | { |
toriten1024 | 1:18e8ead6f188 | 157 | printf("%d",width); |
toriten1024 | 1:18e8ead6f188 | 158 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 159 | } |
toriten1024 | 1:18e8ead6f188 | 160 | else if (this->channel == 0) |
toriten1024 | 1:18e8ead6f188 | 161 | { |
toriten1024 | 1:18e8ead6f188 | 162 | printf("%d,%d",this->width,this->height); |
toriten1024 | 1:18e8ead6f188 | 163 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 164 | } |
toriten1024 | 1:18e8ead6f188 | 165 | else |
toriten1024 | 1:18e8ead6f188 | 166 | { |
toriten1024 | 1:18e8ead6f188 | 167 | printf("%d,%d,%d",this->width,this->height,this->channel); |
toriten1024 | 1:18e8ead6f188 | 168 | printf("\n\r"); |
toriten1024 | 1:18e8ead6f188 | 169 | } |
toriten1024 | 1:18e8ead6f188 | 170 | } |
toriten1024 | 1:18e8ead6f188 | 171 | |
toriten1024 | 1:18e8ead6f188 | 172 | }; |
toriten1024 | 1:18e8ead6f188 | 173 | |
toriten1024 | 1:18e8ead6f188 | 174 | |
toriten1024 | 1:18e8ead6f188 | 175 | |
toriten1024 | 1:18e8ead6f188 | 176 | } // namespace mat |
toriten1024 | 1:18e8ead6f188 | 177 | #endif |