-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathscratch.js
106 lines (96 loc) · 2.07 KB
/
scratch.js
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
"use strict"
var ndarray = require("ndarray")
var ops = require("ndarray-ops")
var pool = require("typedarray-pool")
function clone(array) {
var dtype = array.dtype
if(dtype === "generic" || dtype === "array") {
dtype = "double"
}
var data = pool.malloc(array.size, dtype)
var result = ndarray(data, array.shape)
ops.assign(result, array)
return result
}
exports.clone = clone
function malloc(shape, dtype) {
if(!dtype) {
dtype = "double"
}
var sz = 1
var stride = new Array(shape.length)
for(var i=shape.length-1; i>=0; --i) {
stride[i] = sz
sz *= shape[i]
}
return ndarray(pool.malloc(sz, dtype), shape, stride, 0)
}
exports.malloc = malloc
function free(array) {
if(array.dtype === "generic" || array.dtype === "array") {
return
}
pool.free(array.data)
}
exports.free = free
function zeros(shape, dtype) {
if(!dtype) {
dtype = "double"
}
var sz = 1
var stride = new Array(shape.length)
for(var i=shape.length-1; i>=0; --i) {
stride[i] = sz
sz *= shape[i]
}
var buf = pool.malloc(sz, dtype)
for(var i=0; i<sz; ++i) {
buf[i] = 0
}
return ndarray(buf, shape, stride, 0)
}
exports.zeros = zeros
function ones(shape, dtype) {
if(!dtype) {
dtype = "double"
}
var sz = 1
var stride = new Array(shape.length)
for(var i=shape.length-1; i>=0; --i) {
stride[i] = sz
sz *= shape[i]
}
var buf = pool.malloc(sz, dtype)
for(var i=0; i<sz; ++i) {
buf[i] = 1
}
return ndarray(buf, shape, stride, 0)
}
exports.ones = ones
function eye(shape, dtype) {
var i, offset
if(!dtype) {
dtype = "double"
}
var sz = 1
var stride = new Array(shape.length)
for(i=shape.length-1; i>=0; --i) {
stride[i] = sz
sz *= shape[i]
}
var buf = pool.malloc(sz, dtype)
for(i=0; i<sz; ++i) {
buf[i] = 0
}
var mindim = Infinity
var offsum = 0
for( i=shape.length-1; i>=0; i--) {
offsum += stride[i]
mindim = Math.min(mindim,shape[i])
}
for(i=0,offset=0; i<mindim; i++,offset+=offsum) {
buf[offset] = 1
}
return ndarray(buf, shape, stride, 0)
}
exports.eye = eye