mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
68 lines
1.4 KiB
Plaintext
68 lines
1.4 KiB
Plaintext
//dot product
|
|
var a = [1, 2, 3];
|
|
var b = [4, 5, 6];
|
|
|
|
assert length(a) == length(b), "a and b lengths are wrong";
|
|
|
|
var acc = 0;
|
|
for (var i = 0; i < length(a); i++) {
|
|
acc += get(a, i) * get(b, i);
|
|
}
|
|
|
|
assert acc == 32, "dot product failed";
|
|
|
|
|
|
//assume the args are matrices
|
|
fn matrix(first, second) {
|
|
//get the matrix size
|
|
var l1 = length(first); //rows
|
|
var l2 = length(get(first, 0)); //cols
|
|
|
|
var l3 = length(second); //rows
|
|
var l4 = length(get(second, 0)); //cols
|
|
|
|
//pre-allocate the matrix
|
|
var row = [];
|
|
for (var j = 0; j < l4; j++) {
|
|
push(row, 0);
|
|
}
|
|
|
|
var result = [];
|
|
for (var i = 0; i < l1; i++) {
|
|
push(result, row);
|
|
}
|
|
|
|
//assign the values
|
|
for (var i = 0; i < length(first); i++) {
|
|
//select each element of "first"
|
|
var firstElement = get(first, i);
|
|
|
|
//for each element of second
|
|
for (var i2 = 0; i2 < length(second); i2++) {
|
|
for (var j2 = 0; j2 < length(get(second, 0)); j2++) {
|
|
|
|
var val = get(get(first, i), i2) * get(get(second, i2), j2);
|
|
|
|
//TODO: needs better notation than this tmpRow variable
|
|
var tmpRow = get(result, i);
|
|
set(tmpRow, j2, val);
|
|
set(result, i, tmpRow);
|
|
|
|
//result[ i ][ j2 ] += first[i][i2] * second[i2][j2]
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
//matrix multiply
|
|
var c = [[4], [5], [6]]; //this is a 3x1
|
|
var d = [[1, 2, 3]]; //this is a 1x3
|
|
|
|
// c x d = 3x3
|
|
// d x c = 1x1
|
|
|
|
assert matrix(c, d) == [[4,8,12],[5,10,15],[6,12,18]], "Matrix multiplication failed";
|
|
|
|
print "All good"; |