-
Notifications
You must be signed in to change notification settings - Fork 0
/
Matrix.pde
132 lines (102 loc) · 2.53 KB
/
Matrix.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
public static class Matrix{
int rows;
int cols;
double[][] data;
public Matrix(int rows, int cols){
this.rows = rows;
this.cols = cols;
this.data = new double[rows][cols];
}
public void setData(double[][] newData){
this.data = newData;
}
public void randomize(){
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
data[i][j] = Math.random()*2-1;
}
}
}
public void multiply(double n){
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
data[i][j] = data[i][j] * n;
}
}
}
public void add(double n){
for(int i = 0; i < this.rows; i++){
for(int j = 0; j < this.cols; j++){
this.data[i][j] += n;
}
}
}
public void add(Matrix m){
for(int i = 0; i < this.rows; i++){
for(int j = 0; j < this.cols; j++){
this.data[i][j] += m.data[i][j];
}
}
}
public void map(MapFunction f){
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
data[i][j] = f.elaborateMapping(data[i][j]);
}
}
}
public double[] toArray(){
double[] arr = new double[this.rows*this.cols];
int k=0;
for(int i=0; i<this.rows; i++){
for(int j=0; j<this.cols; j++){
arr[k] = this.data[i][j];
k++;
}
}
return arr;
}
//STATIC METHODS
public static Matrix multiply(Matrix m1, Matrix m2) {
if(m1.cols == m2.rows){
Matrix result = new Matrix(m1.rows, m2.cols);
for(int i = 0; i < result.rows; i++){
for(int j = 0; j < result.cols; j++){
double sum = 0;
for(int k = 0; k < m1.cols; k++){
sum += m1.data[i][k] * m2.data[k][j];
}
result.data[i][j] = sum;
}
}
return result;
}else{
System.err.println("error, cols must be equal to rows ");
return new Matrix(0,0);
}
}
public static Matrix fromArray(double[] arr){
Matrix m = new Matrix(arr.length, 1);
for(int i=0; i<arr.length; i++){
m.data[i][0] = arr[i];
}
return m;
}
//UTILITIES
public Matrix copy(){
Matrix newCopy = new Matrix(this.rows, this.cols);
newCopy.randomize();
newCopy.multiply(0);
newCopy.add(this);
return newCopy;
}
public void print(){
for(int i=0; i<rows; i++){
System.out.println("");
for(int j=0; j<cols; j++){
System.out.print(" "+data[i][j]+" ");
}
}
System.out.println("");
}
}