1
+ using System . Runtime . Serialization . Formatters . Binary ;
2
+
1
3
namespace AiDotNet . Helpers ;
2
4
3
5
public static class SerializationHelper < T >
@@ -55,78 +57,6 @@ public static void SerializeNode(DecisionTreeNode<T>? node, BinaryWriter writer)
55
57
return node ;
56
58
}
57
59
58
- public static void SerializeVector ( BinaryWriter writer , Vector < T > vector )
59
- {
60
- writer . Write ( vector . Length ) ;
61
-
62
- foreach ( var value in vector )
63
- {
64
- writer . Write ( Convert . ToDouble ( value ) ) ;
65
- }
66
- }
67
-
68
- public static Vector < T > DeserializeVector ( BinaryReader reader )
69
- {
70
- int count = reader . ReadInt32 ( ) ;
71
- T [ ] values = new T [ count ] ;
72
- for ( int i = 0 ; i < count ; i ++ )
73
- {
74
- values [ i ] = ( T ) Convert . ChangeType ( reader . ReadDouble ( ) , typeof ( T ) ) ;
75
- }
76
-
77
- return new Vector < T > ( values ) ;
78
- }
79
-
80
- public static void WriteMatrix ( BinaryWriter writer , Matrix < T > matrix )
81
- {
82
- writer . Write ( matrix . Rows ) ;
83
- writer . Write ( matrix . Columns ) ;
84
- for ( int i = 0 ; i < matrix . Rows ; i ++ )
85
- {
86
- for ( int j = 0 ; j < matrix . Columns ; j ++ )
87
- {
88
- writer . Write ( Convert . ToDouble ( matrix [ i , j ] ) ) ;
89
- }
90
- }
91
- }
92
-
93
- public static Matrix < T > ReadMatrix ( BinaryReader reader )
94
- {
95
- int rows = reader . ReadInt32 ( ) ;
96
- int cols = reader . ReadInt32 ( ) ;
97
- Matrix < T > matrix = new Matrix < T > ( rows , cols , NumOps ) ;
98
- for ( int i = 0 ; i < rows ; i ++ )
99
- {
100
- for ( int j = 0 ; j < cols ; j ++ )
101
- {
102
- matrix [ i , j ] = NumOps . FromDouble ( reader . ReadDouble ( ) ) ;
103
- }
104
- }
105
-
106
- return matrix ;
107
- }
108
-
109
- public static void WriteVector ( BinaryWriter writer , Vector < T > vector )
110
- {
111
- writer . Write ( vector . Length ) ;
112
- for ( int i = 0 ; i < vector . Length ; i ++ )
113
- {
114
- writer . Write ( Convert . ToDouble ( vector [ i ] ) ) ;
115
- }
116
- }
117
-
118
- public static Vector < T > ReadVector ( BinaryReader reader )
119
- {
120
- int length = reader . ReadInt32 ( ) ;
121
- Vector < T > vector = new Vector < T > ( length , NumOps ) ;
122
- for ( int i = 0 ; i < length ; i ++ )
123
- {
124
- vector [ i ] = NumOps . FromDouble ( reader . ReadDouble ( ) ) ;
125
- }
126
-
127
- return vector ;
128
- }
129
-
130
60
public static void WriteValue ( BinaryWriter writer , T value )
131
61
{
132
62
if ( typeof ( T ) == typeof ( double ) )
@@ -247,10 +177,8 @@ public static T ReadValue(BinaryReader reader)
247
177
}
248
178
}
249
179
250
- public static byte [ ] SerializeMatrix ( Matrix < T > matrix )
180
+ public static void SerializeMatrix ( BinaryWriter writer , Matrix < T > matrix )
251
181
{
252
- using MemoryStream ms = new ( ) ;
253
- using BinaryWriter writer = new ( ms ) ;
254
182
writer . Write ( matrix . Rows ) ;
255
183
writer . Write ( matrix . Columns ) ;
256
184
for ( int i = 0 ; i < matrix . Rows ; i ++ )
@@ -260,54 +188,148 @@ public static byte[] SerializeMatrix(Matrix<T> matrix)
260
188
writer . Write ( Convert . ToDouble ( matrix [ i , j ] ) ) ;
261
189
}
262
190
}
191
+ }
192
+
193
+ public static Matrix < T > DeserializeMatrix ( BinaryReader reader , int rows , int columns )
194
+ {
195
+ int storedRows = reader . ReadInt32 ( ) ;
196
+ int storedColumns = reader . ReadInt32 ( ) ;
197
+
198
+ if ( storedRows != rows || storedColumns != columns )
199
+ {
200
+ throw new InvalidOperationException ( "Stored matrix dimensions do not match expected dimensions." ) ;
201
+ }
202
+
203
+ Matrix < T > matrix = new Matrix < T > ( rows , columns ) ;
204
+ for ( int i = 0 ; i < rows ; i ++ )
205
+ {
206
+ for ( int j = 0 ; j < columns ; j ++ )
207
+ {
208
+ matrix [ i , j ] = NumOps . FromDouble ( reader . ReadDouble ( ) ) ;
209
+ }
210
+ }
211
+
212
+ return matrix ;
213
+ }
214
+
215
+ public static byte [ ] SerializeMatrix ( Matrix < T > matrix )
216
+ {
217
+ using MemoryStream ms = new MemoryStream ( ) ;
218
+ using BinaryWriter writer = new BinaryWriter ( ms ) ;
219
+
220
+ writer . Write ( matrix . Rows ) ;
221
+ writer . Write ( matrix . Columns ) ;
222
+ for ( int i = 0 ; i < matrix . Rows ; i ++ )
223
+ {
224
+ for ( int j = 0 ; j < matrix . Columns ; j ++ )
225
+ {
226
+ WriteValue ( writer , matrix [ i , j ] ) ;
227
+ }
228
+ }
263
229
264
230
return ms . ToArray ( ) ;
265
231
}
266
232
233
+ public static Matrix < T > DeserializeMatrix ( BinaryReader reader )
234
+ {
235
+ int rows = reader . ReadInt32 ( ) ;
236
+ int columns = reader . ReadInt32 ( ) ;
237
+ Matrix < T > matrix = new Matrix < T > ( rows , columns ) ;
238
+ for ( int i = 0 ; i < rows ; i ++ )
239
+ {
240
+ for ( int j = 0 ; j < columns ; j ++ )
241
+ {
242
+ matrix [ i , j ] = ReadValue ( reader ) ;
243
+ }
244
+ }
245
+
246
+ return matrix ;
247
+ }
248
+
267
249
public static Matrix < T > DeserializeMatrix ( byte [ ] data )
268
250
{
269
- using MemoryStream ms = new ( data ) ;
270
- using BinaryReader reader = new ( ms ) ;
251
+ using MemoryStream ms = new MemoryStream ( data ) ;
252
+ using BinaryReader reader = new BinaryReader ( ms ) ;
253
+
271
254
int rows = reader . ReadInt32 ( ) ;
272
255
int columns = reader . ReadInt32 ( ) ;
273
- Matrix < T > matrix = new ( rows , columns ) ;
256
+ Matrix < T > matrix = new Matrix < T > ( rows , columns ) ;
274
257
for ( int i = 0 ; i < rows ; i ++ )
275
258
{
276
259
for ( int j = 0 ; j < columns ; j ++ )
277
260
{
278
- double value = reader . ReadDouble ( ) ;
279
- matrix [ i , j ] = NumOps . FromDouble ( value ) ;
261
+ matrix [ i , j ] = ReadValue ( reader ) ;
280
262
}
281
263
}
282
264
283
265
return matrix ;
284
266
}
285
267
286
- public static byte [ ] SerializeVector ( Vector < T > vector )
268
+ public static void SerializeVector ( BinaryWriter writer , Vector < T > vector )
287
269
{
288
- using MemoryStream ms = new ( ) ;
289
- using BinaryWriter writer = new ( ms ) ;
290
270
writer . Write ( vector . Length ) ;
291
271
for ( int i = 0 ; i < vector . Length ; i ++ )
292
272
{
293
273
writer . Write ( Convert . ToDouble ( vector [ i ] ) ) ;
294
274
}
275
+ }
276
+
277
+ public static Vector < T > DeserializeVector ( BinaryReader reader , int length )
278
+ {
279
+ int storedLength = reader . ReadInt32 ( ) ;
280
+
281
+ if ( storedLength != length )
282
+ {
283
+ throw new InvalidOperationException ( "Stored vector length does not match expected length." ) ;
284
+ }
285
+
286
+ Vector < T > vector = new Vector < T > ( length ) ;
287
+ for ( int i = 0 ; i < length ; i ++ )
288
+ {
289
+ vector [ i ] = NumOps . FromDouble ( reader . ReadDouble ( ) ) ;
290
+ }
291
+
292
+ return vector ;
293
+ }
294
+
295
+ public static Vector < T > DeserializeVector ( BinaryReader reader )
296
+ {
297
+ int length = reader . ReadInt32 ( ) ;
298
+ T [ ] array = new T [ length ] ;
299
+ for ( int i = 0 ; i < length ; i ++ )
300
+ {
301
+ array [ i ] = ReadValue ( reader ) ;
302
+ }
303
+
304
+ return new Vector < T > ( array ) ;
305
+ }
306
+
307
+ public static byte [ ] SerializeVector ( Vector < T > vector )
308
+ {
309
+ using MemoryStream ms = new MemoryStream ( ) ;
310
+ using BinaryWriter writer = new BinaryWriter ( ms ) ;
311
+
312
+ writer . Write ( vector . Length ) ;
313
+ for ( int i = 0 ; i < vector . Length ; i ++ )
314
+ {
315
+ WriteValue ( writer , vector [ i ] ) ;
316
+ }
295
317
296
318
return ms . ToArray ( ) ;
297
319
}
298
320
299
321
public static Vector < T > DeserializeVector ( byte [ ] data )
300
322
{
301
- using MemoryStream ms = new ( data ) ;
302
- using BinaryReader reader = new ( ms ) ;
323
+ using MemoryStream ms = new MemoryStream ( data ) ;
324
+ using BinaryReader reader = new BinaryReader ( ms ) ;
325
+
303
326
int length = reader . ReadInt32 ( ) ;
304
- Vector < T > vector = new ( length ) ;
327
+ T [ ] array = new T [ length ] ;
305
328
for ( int i = 0 ; i < length ; i ++ )
306
329
{
307
- double value = reader . ReadDouble ( ) ;
308
- vector [ i ] = NumOps . FromDouble ( value ) ;
330
+ array [ i ] = ReadValue ( reader ) ;
309
331
}
310
332
311
- return vector ;
333
+ return new Vector < T > ( array ) ;
312
334
}
313
335
}
0 commit comments