forked from gorgonia/tensor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample_dense_linalg_test.go
More file actions
151 lines (125 loc) · 3.84 KB
/
example_dense_linalg_test.go
File metadata and controls
151 lines (125 loc) · 3.84 KB
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package tensor
import (
"fmt"
)
func ExampleDense_MatMul() {
handleErr := func(err error) {
if err != nil {
panic(err)
}
}
T0 := New(WithShape(10, 15), WithBacking(Range(Float64, 0, 150)))
T1 := New(WithShape(15, 10), WithBacking(Range(Float64, 150, 0)))
T2, err := MatMul(T0, T1)
handleErr(err)
fmt.Printf("T2:\n%v", T2)
// Output:
// T2:
// ⎡ 5600 5495 5390 5285 ... 4970 4865 4760 4655⎤
// ⎢ 23600 23270 22940 22610 ... 21620 21290 20960 20630⎥
// ⎢ 41600 41045 40490 39935 ... 38270 37715 37160 36605⎥
// ⎢ 59600 58820 58040 57260 ... 54920 54140 53360 52580⎥
// .
// .
// .
// ⎢113600 112145 110690 109235 ... 104870 103415 101960 100505⎥
// ⎢131600 129920 128240 126560 ... 121520 119840 118160 116480⎥
// ⎢149600 147695 145790 143885 ... 138170 136265 134360 132455⎥
// ⎣167600 165470 163340 161210 ... 154820 152690 150560 148430⎦
}
func ExampleDense_MatVecMul() {
handleErr := func(err error) {
if err != nil {
panic(err)
}
}
T0 := New(WithShape(2, 3), WithBacking(Range(Float64, 1, 7)))
T1 := New(WithShape(3), WithBacking(Range(Float64, 0, 3)))
T2, err := T0.MatVecMul(T1)
handleErr(err)
fmt.Printf("T2:\n%v\n", T2)
// Output:
// T2:
// [ 8 17]
}
func ExampleDense_MatVecMul_rowMajorSliced() {
// ASPIRATIONAL TODO: IncX and incY of differering values
handleErr := func(err error) {
if err != nil {
panic(err)
}
}
T0 := New(WithShape(10, 12), WithBacking(Range(Float64, 1, 121)))
T1 := New(WithShape(3, 3), WithBacking(Range(Float64, 1, 10)))
T2, err := T0.Slice(makeRS(1, 3), makeRS(3, 6))
handleErr(err)
T3, err := T1.Slice(nil, makeRS(1, 2))
handleErr(err)
// here the + formatting option is used because you should know that after this particular slice, the result will be a vector
fmt.Printf("T2:\n%+v", T2)
fmt.Printf("T3:\n%+v\n", T3)
// here we print the underlying slice of T3 just to show that it's actually a much larger slice
fmt.Printf("Underlying Slice: %v\n", T3.Data())
T4, err := T2.(*Dense).MatVecMul(T3)
handleErr(err)
fmt.Printf("T4:\n%v\n", T4)
// Outputz:
// T2:
// Matrix (2, 3) [10 1]
// ⎡14 15 16⎤
// ⎣24 25 26⎦
// T3:
// Vector (3) [3]
// [2 5 8]
// Underlying Slice: [2 3 4 5 6 7 8]
// T4:
// [261 441]
}
func ExampleDense_MatMul_sliced() {
//ASPIRATIONAL TODO: incX and incY of different sizes
handleErr := func(err error) {
if err != nil {
panic(err)
}
}
T0 := New(WithShape(10, 15), WithBacking(Range(Float64, 0, 150)))
T1 := New(WithShape(15, 10), WithBacking(Range(Float64, 150, 0)))
T2, err := MatMul(T0, T1)
handleErr(err)
fmt.Printf("T2:\n%v", T2)
// Slice T0 to only take a (2, 3) on the upper quadrant
// T3 := T0[0:3, 0:2]
T3, err := T0.Slice(makeRS(0, 3), makeRS(0, 2))
handleErr(err)
fmt.Printf("T3:\n%v", T3)
T4, err := T1.Slice(makeRS(13, 15), makeRS(8, 10))
handleErr(err)
fmt.Printf("T4:\n%v", T4)
T5, err := T3.(*Dense).MatMul(T4)
handleErr(err)
fmt.Printf("T3xT4:\n%v", T5)
// Outputz:
// T2:
// ⎡ 5600 5495 5390 5285 ... 4970 4865 4760 4655⎤
// ⎢ 23600 23270 22940 22610 ... 21620 21290 20960 20630⎥
// ⎢ 41600 41045 40490 39935 ... 38270 37715 37160 36605⎥
// ⎢ 59600 58820 58040 57260 ... 54920 54140 53360 52580⎥
// .
// .
// .
// ⎢113600 112145 110690 109235 ... 104870 103415 101960 100505⎥
// ⎢131600 129920 128240 126560 ... 121520 119840 118160 116480⎥
// ⎢149600 147695 145790 143885 ... 138170 136265 134360 132455⎥
// ⎣167600 165470 163340 161210 ... 154820 152690 150560 148430⎦
// T3:
// ⎡ 0 1⎤
// ⎢15 16⎥
// ⎣30 31⎦
// T4:
// ⎡12 11⎤
// ⎣ 2 1⎦
// T3xT4:
// ⎡ 2 1⎤
// ⎢212 181⎥
// ⎣422 361⎦
}