source: project/release/4/flsim/trunk/sml-lib/tensor/sparsetest.sml @ 29960

Last change on this file since 29960 was 29960, checked in by Ivan Raikov, 8 years ago

flsim: added tensor library to sml support files

File size: 5.4 KB
Line 
1
2(*
3 Copyright (c) Ivan Raikov.
4 All rights reserved.
5
6Redistribution and use in source and binary forms, with or
7without modification, are permitted provided that the following
8conditions are met:
9
101. Redistributions of source code must retain the above copyright
11   notice, this list of conditions and the following disclaimer.
12
132. Redistributions in binary form must reproduce the above
14   copyright notice, this list of conditions and the following
15   disclaimer in the documentation and/or other materials provided
16   with the distribution.
17
183. All advertising materials mentioning features or use of this
19   software must display the following acknowledgement:
20        This product includes software developed by Ivan Raikov.
21
22*)
23
24fun putStrLn out str = 
25    (TextIO.output (out, str);
26     TextIO.output (out, "\n"))
27
28
29fun realRandomTensor (xseed,yseed) shape =
30    let 
31        val length = Index.length shape
32        val seed   = Random.rand (xseed,yseed)
33        val a      = RTensor.Array.array(length, 0.0)
34        fun loop 0 = RTensor.fromArray(shape, a)
35          | loop j = (RTensor.Array.update(a, length-j, Random.randReal seed);
36                      loop (j-1))
37    in 
38        loop (length - 1)
39    end
40
41val _ = putStrLn TextIO.stdOut "SparseMatrix fromGenerator:"
42
43val seed   = Random.rand (13,17)
44val prob   = 0.1
45val SA     = SparseMatrix.fromGenerator
46                 [10,10] 
47                 (fn (i) => (if Real.>= (Random.randReal seed, prob) then 1.0 else 0.0),
48                  [4,4], SOME [5,5])
49
50val _ = Loop.app
51            (0,10,fn (i) => 
52                    let
53                        val _ = putStrLn TextIO.stdOut ("SparseMatrix slice column " ^ (Int.toString i) ^ ": ")
54                        val sl = SparseMatrix.slice (SA,1,i) 
55                    in
56                        SparseMatrix.sliceAppi
57                            (fn (i,x) => putStrLn TextIO.stdOut ("[" ^ (Int.toString i) ^ "]: " ^ (Real.toString x)))
58                            sl
59                    end)
60
61
62val _ = putStrLn TextIO.stdOut "SparseMatrix fromTensor:"
63
64val SA  = SparseMatrix.fromTensor
65              [6,6] 
66              (RTensor.fromList
67                   ([6,6], 
68                    List.concat
69                    [
70                     [10.0,3.0,0.0,3.0,0.0,0.0],
71                     [0.0,9.0,7.0,0.0,8.0,4.0],
72                     [0.0,0.0,8.0,8.0,0.0,0.0],
73                     [0.0,0.0,7.0,7.0,9.0,0.0],
74                     [~2.0,0.0,0.0,5.0,9.0,2.0],
75                     [0.0,3.0,0.0,0.0,13.0,~1.0]
76                     ]), NONE)
77
78
79val _ = Loop.app
80            (0,6,fn (i) => 
81                    Loop.app (0,6,fn (j) => 
82                                     (
83                                      print ("SA(" ^ (Int.toString i) ^ "," ^ (Int.toString j) ^ ") = "); 
84                                      TensorFile.realWrite
85                                          (TextIO.stdOut) 
86                                          (SparseMatrix.sub (SA,[i,j]))
87                                     )
88            ))
89
90val _ = Loop.app
91            (0,6,fn (i) => 
92                    let
93                        val _ = putStrLn TextIO.stdOut ("SparseMatrix slice column " ^ (Int.toString i) ^ ": ")
94                        val sl = SparseMatrix.slice (SA,1,i) 
95                    in
96                        SparseMatrix.sliceAppi
97                            (fn (i,x) => putStrLn TextIO.stdOut ("[" ^ (Int.toString i) ^ "]: " ^ (Real.toString x)))
98                            sl
99                    end)
100
101val _ = Loop.app
102            (0,6,fn (i) => 
103                    let
104                        val _ = putStrLn TextIO.stdOut ("SparseMatrix slice row " ^ (Int.toString i) ^ ": ")
105                        val sl = SparseMatrix.slice (SA,0,i) 
106                    in
107                        SparseMatrix.sliceAppi
108                            (fn (i,x) => putStrLn TextIO.stdOut ("[" ^ (Int.toString i) ^ "]: " ^ (Real.toString x)))
109                            sl
110                    end)
111
112val blocks = #blocks SA
113
114val _ = putStrLn TextIO.stdOut "SparseMatrix fromTensorList:"
115
116val SB = SparseMatrix.fromTensorList
117             [10,10]
118             [
119              {tensor=(RTensor.*> 0.2
120                               (RTensor.new ([3,8],1.0))),
121               offset=[7,0],
122               sparse=true},
123             
124              {tensor=(RTensor.*> 0.1 
125                               (RTensor.new ([7,8],1.0))),
126               offset=[0,0],
127               sparse=true}
128             
129             ]
130
131val blocks = #blocks SB
132val _ = Loop.app
133            (0,10,fn (j) => 
134                    Loop.app (0,10,fn (i) => 
135                                     (
136                                      print ("SA(" ^ (Int.toString i) ^ "," ^ (Int.toString j) ^ ") = "); 
137                                      TensorFile.realWrite
138                                          (TextIO.stdOut) 
139                                          (SparseMatrix.sub (SB,[i,j]))
140                                     )
141            ))
142
143val _ = Loop.app
144            (0,10,fn (i) => 
145                    let
146                        val _ = putStrLn TextIO.stdOut ("SparseMatrix slice column " ^ (Int.toString i) ^ ": ")
147                        val sl = SparseMatrix.slice (SB,1,i) 
148                    in
149                        SparseMatrix.sliceAppi
150                            (fn (i,x) => putStrLn TextIO.stdOut ("[" ^ (Int.toString i) ^ "]: " ^ (Real.toString x)))
151                            sl
152                    end)
Note: See TracBrowser for help on using the repository browser.