PLaSK library
Loading...
Searching...
No Matches
tnt_array2d_utils.h
Go to the documentation of this file.
1/*
2*
3* Template Numerical Toolkit (TNT)
4*
5* Mathematical and Computational Sciences Division
6* National Institute of Technology,
7* Gaithersburg, MD USA
8*
9*
10* This software was developed at the National Institute of Standards and
11* Technology (NIST) by employees of the Federal Government in the course
12* of their official duties. Pursuant to title 17 Section 105 of the
13* United States Code, this software is not subject to copyright protection
14* and is in the public domain. NIST assumes no responsibility whatsoever for
15* its use by other parties, and makes no guarantees, expressed or implied,
16* about its quality, reliability, or any other characteristic.
17*
18*/
19
20
21#ifndef TNT_ARRAY2D_UTILS_H
22#define TNT_ARRAY2D_UTILS_H
23
24#include <cstdlib>
25#include <cassert>
26
27namespace TNT
28{
29
30
31template <class T>
32std::ostream& operator<<(std::ostream &s, const Array2D<T> &A)
33{
34 int M=A.dim1();
35 int N=A.dim2();
36
37 s << M << " " << N << "\n";
38
39 for (int i=0; i<M; i++)
40 {
41 for (int j=0; j<N; j++)
42 {
43 s << A[i][j] << " ";
44 }
45 s << "\n";
46 }
47
48
49 return s;
50}
51
52template <class T>
53std::istream& operator>>(std::istream &s, Array2D<T> &A)
54{
55
56 int M, N;
57
58 s >> M >> N;
59
60 Array2D<T> B(M,N);
61
62 for (int i=0; i<M; i++)
63 for (int j=0; j<N; j++)
64 {
65 s >> B[i][j];
66 }
67
68 A = B;
69 return s;
70}
71
72
73template <class T>
75{
76 int m = A.dim1();
77 int n = A.dim2();
78
79 if (B.dim1() != m || B.dim2() != n )
80 return Array2D<T>();
81
82 else
83 {
84 Array2D<T> C(m,n);
85
86 for (int i=0; i<m; i++)
87 {
88 for (int j=0; j<n; j++)
89 C[i][j] = A[i][j] + B[i][j];
90 }
91 return C;
92 }
93}
94
95template <class T>
97{
98 int m = A.dim1();
99 int n = A.dim2();
100
101 if (B.dim1() != m || B.dim2() != n )
102 return Array2D<T>();
103
104 else
105 {
106 Array2D<T> C(m,n);
107
108 for (int i=0; i<m; i++)
109 {
110 for (int j=0; j<n; j++)
111 C[i][j] = A[i][j] - B[i][j];
112 }
113 return C;
114 }
115}
116
117
118template <class T>
120{
121 int m = A.dim1();
122 int n = A.dim2();
123
124 if (B.dim1() != m || B.dim2() != n )
125 return Array2D<T>();
126
127 else
128 {
129 Array2D<T> C(m,n);
130
131 for (int i=0; i<m; i++)
132 {
133 for (int j=0; j<n; j++)
134 C[i][j] = A[i][j] * B[i][j];
135 }
136 return C;
137 }
138}
139
140
141
142
143template <class T>
145{
146 int m = A.dim1();
147 int n = A.dim2();
148
149 if (B.dim1() != m || B.dim2() != n )
150 return Array2D<T>();
151
152 else
153 {
154 Array2D<T> C(m,n);
155
156 for (int i=0; i<m; i++)
157 {
158 for (int j=0; j<n; j++)
159 C[i][j] = A[i][j] / B[i][j];
160 }
161 return C;
162 }
163}
164
165
166
167
168
169template <class T>
171{
172 int m = A.dim1();
173 int n = A.dim2();
174
175 if (B.dim1() == m || B.dim2() == n )
176 {
177 for (int i=0; i<m; i++)
178 {
179 for (int j=0; j<n; j++)
180 A[i][j] += B[i][j];
181 }
182 }
183 return A;
184}
185
186
187
188template <class T>
190{
191 int m = A.dim1();
192 int n = A.dim2();
193
194 if (B.dim1() == m || B.dim2() == n )
195 {
196 for (int i=0; i<m; i++)
197 {
198 for (int j=0; j<n; j++)
199 A[i][j] -= B[i][j];
200 }
201 }
202 return A;
203}
204
205
206
207template <class T>
209{
210 int m = A.dim1();
211 int n = A.dim2();
212
213 if (B.dim1() == m || B.dim2() == n )
214 {
215 for (int i=0; i<m; i++)
216 {
217 for (int j=0; j<n; j++)
218 A[i][j] *= B[i][j];
219 }
220 }
221 return A;
222}
223
224
225
226
227
228template <class T>
230{
231 int m = A.dim1();
232 int n = A.dim2();
233
234 if (B.dim1() == m || B.dim2() == n )
235 {
236 for (int i=0; i<m; i++)
237 {
238 for (int j=0; j<n; j++)
239 A[i][j] /= B[i][j];
240 }
241 }
242 return A;
243}
244
258template <class T>
260{
261 if (A.dim2() != B.dim1())
262 return Array2D<T>();
263
264 int M = A.dim1();
265 int N = A.dim2();
266 int K = B.dim2();
267
268 Array2D<T> C(M,K);
269
270 for (int i=0; i<M; i++)
271 for (int j=0; j<K; j++)
272 {
273 T sum = 0;
274
275 for (int k=0; k<N; k++)
276 sum += A[i][k] * B [k][j];
277
278 C[i][j] = sum;
279 }
280
281 return C;
282
283}
284
285} // namespace TNT
286
287#endif