51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
| /*
 | |
|  * Tensor2.h
 | |
|  * @brief Rank 2 Tensor based on http://www.gps.caltech.edu/~walter/FTensor/FTensor.pdf
 | |
|  * Created on: Feb 10, 2010
 | |
|  * @author: Frank Dellaert
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| #include "tensors.h"
 | |
| 
 | |
| namespace tensors {
 | |
| 
 | |
| 	/** Rank 2 Tensor */
 | |
| 	template<int N1, int N2>
 | |
| 	class Tensor2 {
 | |
| 	protected:
 | |
| 		Tensor1<N1> T[N2];
 | |
| 
 | |
| 	public:
 | |
| 
 | |
| 		/** default constructor */
 | |
| 		Tensor2() {
 | |
| 		}
 | |
| 
 | |
| 		/* construct from data */
 | |
| 		Tensor2(const double data[N2][N1]) {
 | |
| 			for (int j = 0; j < N2; j++)
 | |
| 				T[j] = Tensor1<N1> (data[j]);
 | |
| 		}
 | |
| 
 | |
| 		/** construct from expression */
 | |
| 		template<class A, char I, char J>
 | |
| 		Tensor2(const Tensor2Expression<A, Index<N1, I> , Index<N2, J> >& a) {
 | |
| 			for (int j = 0; j < N2; j++)
 | |
| 				T[j] = a(j);
 | |
| 		}
 | |
| 
 | |
| 		double operator()(int i, int j) const {
 | |
| 			return T[j](i);
 | |
| 		}
 | |
| 
 | |
| 		/** convert to expression */
 | |
| 		template<char I, char J> Tensor2Expression<Tensor2, Index<N1, I> , Index<
 | |
| 				N2, J> > operator()(Index<N1, I> i, Index<N2, J> j) const {
 | |
| 			return Tensor2Expression<Tensor2, Index<N1, I> , Index<N2, J> > (*this);
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| } // namespace tensors
 | |
| 
 |