diff --git a/MLPP/LinAlg/LinAlg.cpp b/MLPP/LinAlg/LinAlg.cpp index cdf5af8..f95bb01 100644 --- a/MLPP/LinAlg/LinAlg.cpp +++ b/MLPP/LinAlg/LinAlg.cpp @@ -74,6 +74,39 @@ namespace MLPP{ return C; } + std::vector> LinAlg::kronecker_product(std::vector> A, std::vector> B){ + std::vector> C; + // C.resize(A.size() * B.size()); + // for(int i = 0; i < C.size(); i++){ + // C[i].resize(A[0].size() * B[0].size()); + // } + + // [1,2,3,4] [1,2,3,4,5] + // [1,1,1,1] [1,2,3,4,5] + // [1,2,3,4,5] + + // [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] + // [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] + // [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] + // [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] + // [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] + // [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] + + // Resulting matrix: A.size() * B.size() + // A[0].size() * B[0].size() + + for(int k = 0; k < A.size(); k++){ + for(int j = 0; j < B.size(); j++){ + std::vector> row; + for(int i = 0; i < A[0].size(); i++){ + row.push_back(scalarMultiply(A[k][i], B[j])); + } + C.push_back(flatten(row)); + } + } + return C; + } + std::vector> LinAlg::elementWiseDivision(std::vector> A, std::vector> B){ std::vector> C; C.resize(A.size()); diff --git a/main.cpp b/main.cpp index 0789275..c532273 100644 --- a/main.cpp +++ b/main.cpp @@ -364,6 +364,7 @@ int main() { // std::cout << alg.trace({{1,2}, {3,4}}) << std::endl; // alg.printMatrix(alg.pinverse({{1,2}, {3,4}})); // alg.printMatrix(alg.diag({1,2,3,4,5})); + // alg.printMatrix(alg.kronecker_product({{1,2,3,4,5}}, {{6,7,8,9,10}})); return 0; } \ No newline at end of file