summaryrefslogtreecommitdiff
path: root/io/matrix.io
blob: 3352c670f55e3243295ec0b94d6d27b92036ee6d (plain) (blame)
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
Matrix := List clone
Matrix dim := method(x, y,
	m := Matrix clone
	x repeat (
		l := List clone
		l setSize(y)
		m append(l)
	)
	return m
)

Matrix set := method(x, y, e,
	self at(x) atPut(y, e)
)

Matrix get := method(x, y,
	self at(x) at(y)
)

Matrix xysize := method(
	result := List clone
	result append(self size)
	result append(self at(0) size)
	return result
)

Matrix transpose := method(
	dims := self xysize
	m := Matrix dim(dims at(1), dims at(0))

	for (x, 0, dims at(0) -1,
		for (y, 0, dims at(1) -1,
			m set(y, x, self get (x, y))
		)
	)

	return m
)

Matrix toFile := method(fname,
	f := File with(fname)
	f remove
	f openForUpdating
	f write(self serialized)
	f close
	return self
)

Matrix fromFile := method(fname,
	m := doFile(fname)
	return m
)



m1 := Matrix dim(2,3)

m1 set(0,0,0)
m1 set(0,1,1)
m1 set(0,2,2)
m1 set(1,0,3)
m1 set(1,1,4)
m1 set(1,2,5)

writeln("m1: ", m1)

m2 := m1 transpose
writeln("m2: ", m2)

if (m1 == m2 transpose, "Equals!", "Not equals!") println

m1 toFile("m1.txt")
m3 := Matrix fromFile("m1.txt")
writeln("m3 (serialized from m1): ", m3)