/* * * Template Numerical Toolkit (TNT) * * Mathematical and Computational Sciences Division * National Institute of Technology, * Gaithersburg, MD USA * * * This software was developed at the National Institute of Standards and * Technology (NIST) by employees of the Federal Government in the course * of their official duties. Pursuant to title 17 Section 105 of the * United States Code, this software is not subject to copyright protection * and is in the public domain. NIST assumes no responsibility whatsoever for * its use by other parties, and makes no guarantees, expressed or implied, * about its quality, reliability, or any other characteristic. * */ #ifndef TNT_ARRAY2D_UTILS_H #define TNT_ARRAY2D_UTILS_H #include #include namespace TNT { template std::ostream& operator<<(std::ostream &s, const Array2D &A) { int M=A.dim1(); int N=A.dim2(); s << M << " " << N << "\n"; for (int i=0; i std::istream& operator>>(std::istream &s, Array2D &A) { int M, N; s >> M >> N; Array2D B(M,N); for (int i=0; i> B[i][j]; } A = B; return s; } template Array2D operator+(const Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() != m || B.dim2() != n ) return Array2D(); else { Array2D C(m,n); for (int i=0; i Array2D operator-(const Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() != m || B.dim2() != n ) return Array2D(); else { Array2D C(m,n); for (int i=0; i Array2D operator*(const Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() != m || B.dim2() != n ) return Array2D(); else { Array2D C(m,n); for (int i=0; i Array2D operator/(const Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() != m || B.dim2() != n ) return Array2D(); else { Array2D C(m,n); for (int i=0; i Array2D& operator+=(Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() == m || B.dim2() == n ) { for (int i=0; i Array2D& operator-=(Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() == m || B.dim2() == n ) { for (int i=0; i Array2D& operator*=(Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() == m || B.dim2() == n ) { for (int i=0; i Array2D& operator/=(Array2D &A, const Array2D &B) { int m = A.dim1(); int n = A.dim2(); if (B.dim1() == m || B.dim2() == n ) { for (int i=0; i Array2D matmult(const Array2D &A, const Array2D &B) { if (A.dim2() != B.dim1()) return Array2D(); int M = A.dim1(); int N = A.dim2(); int K = B.dim2(); Array2D C(M,K); for (int i=0; i