diff --git a/mlpp/lin_alg/mlpp_tensor3.cpp b/mlpp/lin_alg/mlpp_tensor3.cpp index 6efea97..7639e8e 100644 --- a/mlpp/lin_alg/mlpp_tensor3.cpp +++ b/mlpp/lin_alg/mlpp_tensor3.cpp @@ -240,7 +240,7 @@ void MLPPTensor3::shape_set(const Size3i &p_size) { _size = p_size; } -Vector MLPPTensor3::row_get_vector(int p_index_y, int p_index_z) const { +Vector MLPPTensor3::row_get_vector(int p_index_z, int p_index_y) const { ERR_FAIL_INDEX_V(p_index_y, _size.y, Vector()); ERR_FAIL_INDEX_V(p_index_z, _size.z, Vector()); @@ -263,7 +263,7 @@ Vector MLPPTensor3::row_get_vector(int p_index_y, int p_index_z) const { return ret; } -PoolRealArray MLPPTensor3::row_get_pool_vector(int p_index_y, int p_index_z) const { +PoolRealArray MLPPTensor3::row_get_pool_vector(int p_index_z, int p_index_y) const { ERR_FAIL_INDEX_V(p_index_y, _size.y, PoolRealArray()); ERR_FAIL_INDEX_V(p_index_z, _size.z, PoolRealArray()); @@ -287,7 +287,7 @@ PoolRealArray MLPPTensor3::row_get_pool_vector(int p_index_y, int p_index_z) con return ret; } -Ref MLPPTensor3::row_get_mlpp_vector(int p_index_y, int p_index_z) const { +Ref MLPPTensor3::row_get_mlpp_vector(int p_index_z, int p_index_y) const { ERR_FAIL_INDEX_V(p_index_y, _size.y, Ref()); ERR_FAIL_INDEX_V(p_index_z, _size.z, Ref()); @@ -311,7 +311,7 @@ Ref MLPPTensor3::row_get_mlpp_vector(int p_index_y, int p_index_z) c return ret; } -void MLPPTensor3::row_get_into_mlpp_vector(int p_index_y, int p_index_z, Ref target) const { +void MLPPTensor3::row_get_into_mlpp_vector(int p_index_z, int p_index_y, Ref target) const { ERR_FAIL_COND(!target.is_valid()); ERR_FAIL_INDEX(p_index_y, _size.y); ERR_FAIL_INDEX(p_index_z, _size.z); @@ -1841,21 +1841,25 @@ real_t MLPPTensor3::norm_2(std::vector>> A) { } */ -/* -std::vector> MLPPTensor3::tensor_vec_mult(std::vector>> A, std::vector b) { - std::vector> C; - C.resize(A.size()); - for (uint32_t i = 0; i < C.size(); i++) { - C[i].resize(A[0].size()); - } - for (uint32_t i = 0; i < C.size(); i++) { - for (uint32_t j = 0; j < C[i].size(); j++) { - C[i][j] = dot(A[i][j], b); +Ref MLPPTensor3::tensor_vec_mult(const Ref &b) { + Ref C; + C.instance(); + C->resize(Size2i(_size.y, _size.z)); + + Ref row_tmp; + row_tmp.instance(); + row_tmp->resize(_size.x); + + for (int i = 0; i < _size.z; i++) { + for (int j = 0; j < _size.y; j++) { + row_get_into_mlpp_vector(i, j, row_tmp); + + C->element_set(i, j, row_tmp->dot(b)); } } + return C; } -*/ /* // Bad implementation. Change this later. diff --git a/mlpp/lin_alg/mlpp_tensor3.h b/mlpp/lin_alg/mlpp_tensor3.h index da4371b..743c8a5 100644 --- a/mlpp/lin_alg/mlpp_tensor3.h +++ b/mlpp/lin_alg/mlpp_tensor3.h @@ -14,13 +14,13 @@ #include "core/object/resource.h" -#else +#else +#include "core/containers/vector.h" #include "core/defs.h" #include "core/math_funcs.h" -#include "core/pool_arrays.h" -#include "core/containers/vector.h" #include "core/os/memory.h" +#include "core/pool_arrays.h" #include "gen/resource.h" @@ -121,10 +121,10 @@ public: _data[p_index_y * _size.x + p_index_x + _size.x * _size.y * p_index_z] = p_val; } - Vector row_get_vector(int p_index_y, int p_index_z) const; - PoolRealArray row_get_pool_vector(int p_index_y, int p_index_z) const; - Ref row_get_mlpp_vector(int p_index_y, int p_index_z) const; - void row_get_into_mlpp_vector(int p_index_y, int p_index_z, Ref target) const; + Vector row_get_vector(int p_index_z, int p_index_y) const; + PoolRealArray row_get_pool_vector(int p_index_z, int p_index_y) const; + Ref row_get_mlpp_vector(int p_index_z, int p_index_y) const; + void row_get_into_mlpp_vector(int p_index_z, int p_index_y, Ref target) const; void row_set_vector(int p_index_y, int p_index_z, const Vector &p_row); void row_set_pool_vector(int p_index_y, int p_index_z, const PoolRealArray &p_row); @@ -244,7 +244,7 @@ public: //real_t norm_2(std::vector>> A); - //std::vector> tensor_vec_mult(std::vector>> A, std::vector b); + Ref tensor_vec_mult(const Ref &b); //std::vector>> vector_wise_tensor_product(std::vector>> A, std::vector> B); public: