Class: NMatrix
Overview
Constant Summary
collapse
- CLASS_DIMENSION =
2
Instance Method Summary
collapse
Methods inherited from NArray
#==, #all?, #any?, #complex?, #integer?, #mean, #median, #none?, #randomn, #rank_total, #rms, #rmsdev, #stddev
Instance Method Details
#*(other) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/nmatrix.rb', line 35
def *(other)
case other
when NMatrix
NMatrix.mul_add( NArray.refer(self).newdim!(0),other.newdim(2), 1 )
when NVector
NVector.mul_add( NArray.refer(self), other.newdim(1), 0 )
when NArray
if other.instance_of?(NArray)
NMatrix.mul( NArray.refer(self), other.newdim(0,0) )
else
other.coerce_rev( self, :* )
end
when Numeric
super
when Array
NMatrix.mul( self, NArray[*other].newdim!(0,0) )
else
raise TypeError,"Illegal operation: NMatrix * %s" % other.class
end
end
|
#**(n) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/nmatrix.rb', line 80
def **(n)
case n
when Integer
if n==0
return 1.0
elsif n<0
m = self.inverse
n = -n
else
m = self
end
(2..n).each{ m *= self }
m
else
raise TypeError,"Illegal operation: NMatrix ** %s" % other.class
end
end
|
#+(other) ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/nmatrix.rb', line 11
def +(other)
case other
when NMatrix
return super(NArray.refer(other))
when NArray
unless other.instance_of?(NArray)
return other.coerce_rev( self, :+ )
end
end
raise TypeError,"Illegal operation: NMatrix + %s" % other.class
end
|
#-(other) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/nmatrix.rb', line 23
def -(other)
case other
when NMatrix
return super(NArray.refer(other))
when NArray
unless other.instance_of?(NArray)
return other.coerce_rev( self, :- )
end
end
raise TypeError,"Illegal operation: NMatrix - %s" % other.class
end
|
#/(other) ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/nmatrix.rb', line 59
def /(other)
case other
when NMatrix
other.lu.solve(self)
when NVector
raise TypeError,"Illegal operation: NMatrix / %s" % other.class
when NArray
if other.instance_of?(NArray)
NMatrix.div( NArray.refer(self), other.newdim(0,0) )
else
other.coerce_rev( self, :/ )
end
when Numeric
NMatrix.div( NArray.refer(self), other )
when Array
NMatrix.div( self, NArray[*other].newdim!(0,0) )
else
raise TypeError,"Illegal operation: NMatrix / %s" % other.class
end
end
|
#coerce_rev(other, id) ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/nmatrix.rb', line 98
def coerce_rev(other,id)
case id
when :*
if other.instance_of?(NArray)
return NMatrix.mul( other.newdim(0,0), self )
end
if other.instance_of?(NArrayScalar)
return NMatrix.mul( other.newdim(0), self )
end
when :/
if other.instance_of?(NArray)
return NMatrix.mul( other.newdim(0,0), self.inverse )
end
if other.instance_of?(NArrayScalar)
return NMatrix.mul( other.newdim(0), self.inverse )
end
end
raise TypeError,"Illegal operation: %s %s NMatrix" %
[other.class, id.id2name]
end
|
#diagonal(val) ⇒ Object
141
142
143
|
# File 'lib/nmatrix.rb', line 141
def diagonal(val)
self.dup.diagonal!(val)
end
|
#diagonal!(val = 1) ⇒ Object
131
132
133
134
135
136
137
138
139
|
# File 'lib/nmatrix.rb', line 131
def diagonal!(val=1)
shp = self.shape
idx = NArray.int(shp[0..1].min).indgen! * (shp[0]+1)
ref = reshape(shp[0]*shp[1],true)
val = NArray.to_na(val)
raise ArgumentError, "must be 1-d array" if val.dim!=1
ref[idx,true] = val.newdim!(-1)
self
end
|
#inverse ⇒ Object
119
120
121
|
# File 'lib/nmatrix.rb', line 119
def inverse
self.lu.solve( NMatrix.new(self.typecode, *self.shape).fill!(0).unit )
end
|
#transpose(*arg) ⇒ Object
123
124
125
126
127
128
129
|
# File 'lib/nmatrix.rb', line 123
def transpose(*arg)
if arg.size==0
super(1,0)
else
super
end
end
|
#unit ⇒ Object
Also known as:
identity, I
145
146
147
|
# File 'lib/nmatrix.rb', line 145
def unit
diagonal!
end
|