Implemented tensor_vec_mult, also swapped some parameters in MLPPTensor to match the expected order.

This commit is contained in:
Relintai 2023-12-29 17:32:31 +01:00
parent 197b59b752
commit 6a7448b278
2 changed files with 27 additions and 23 deletions

View File

@ -240,7 +240,7 @@ void MLPPTensor3::shape_set(const Size3i &p_size) {
_size = p_size; _size = p_size;
} }
Vector<real_t> MLPPTensor3::row_get_vector(int p_index_y, int p_index_z) const { Vector<real_t> MLPPTensor3::row_get_vector(int p_index_z, int p_index_y) const {
ERR_FAIL_INDEX_V(p_index_y, _size.y, Vector<real_t>()); ERR_FAIL_INDEX_V(p_index_y, _size.y, Vector<real_t>());
ERR_FAIL_INDEX_V(p_index_z, _size.z, Vector<real_t>()); ERR_FAIL_INDEX_V(p_index_z, _size.z, Vector<real_t>());
@ -263,7 +263,7 @@ Vector<real_t> MLPPTensor3::row_get_vector(int p_index_y, int p_index_z) const {
return ret; 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_y, _size.y, PoolRealArray());
ERR_FAIL_INDEX_V(p_index_z, _size.z, 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; return ret;
} }
Ref<MLPPVector> MLPPTensor3::row_get_mlpp_vector(int p_index_y, int p_index_z) const { Ref<MLPPVector> MLPPTensor3::row_get_mlpp_vector(int p_index_z, int p_index_y) const {
ERR_FAIL_INDEX_V(p_index_y, _size.y, Ref<MLPPVector>()); ERR_FAIL_INDEX_V(p_index_y, _size.y, Ref<MLPPVector>());
ERR_FAIL_INDEX_V(p_index_z, _size.z, Ref<MLPPVector>()); ERR_FAIL_INDEX_V(p_index_z, _size.z, Ref<MLPPVector>());
@ -311,7 +311,7 @@ Ref<MLPPVector> MLPPTensor3::row_get_mlpp_vector(int p_index_y, int p_index_z) c
return ret; return ret;
} }
void MLPPTensor3::row_get_into_mlpp_vector(int p_index_y, int p_index_z, Ref<MLPPVector> target) const { void MLPPTensor3::row_get_into_mlpp_vector(int p_index_z, int p_index_y, Ref<MLPPVector> target) const {
ERR_FAIL_COND(!target.is_valid()); ERR_FAIL_COND(!target.is_valid());
ERR_FAIL_INDEX(p_index_y, _size.y); ERR_FAIL_INDEX(p_index_y, _size.y);
ERR_FAIL_INDEX(p_index_z, _size.z); ERR_FAIL_INDEX(p_index_z, _size.z);
@ -1841,21 +1841,25 @@ real_t MLPPTensor3::norm_2(std::vector<std::vector<std::vector<real_t>>> A) {
} }
*/ */
/* Ref<MLPPMatrix> MLPPTensor3::tensor_vec_mult(const Ref<MLPPVector> &b) {
std::vector<std::vector<real_t>> MLPPTensor3::tensor_vec_mult(std::vector<std::vector<std::vector<real_t>>> A, std::vector<real_t> b) { Ref<MLPPMatrix> C;
std::vector<std::vector<real_t>> C; C.instance();
C.resize(A.size()); C->resize(Size2i(_size.y, _size.z));
for (uint32_t i = 0; i < C.size(); i++) {
C[i].resize(A[0].size()); Ref<MLPPVector> row_tmp;
} row_tmp.instance();
for (uint32_t i = 0; i < C.size(); i++) { row_tmp->resize(_size.x);
for (uint32_t j = 0; j < C[i].size(); j++) {
C[i][j] = dot(A[i][j], b); 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; return C;
} }
*/
/* /*
// Bad implementation. Change this later. // Bad implementation. Change this later.

View File

@ -16,11 +16,11 @@
#else #else
#include "core/containers/vector.h"
#include "core/defs.h" #include "core/defs.h"
#include "core/math_funcs.h" #include "core/math_funcs.h"
#include "core/pool_arrays.h"
#include "core/containers/vector.h"
#include "core/os/memory.h" #include "core/os/memory.h"
#include "core/pool_arrays.h"
#include "gen/resource.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; _data[p_index_y * _size.x + p_index_x + _size.x * _size.y * p_index_z] = p_val;
} }
Vector<real_t> row_get_vector(int p_index_y, int p_index_z) const; Vector<real_t> row_get_vector(int p_index_z, int p_index_y) const;
PoolRealArray row_get_pool_vector(int p_index_y, int p_index_z) const; PoolRealArray row_get_pool_vector(int p_index_z, int p_index_y) const;
Ref<MLPPVector> row_get_mlpp_vector(int p_index_y, int p_index_z) const; Ref<MLPPVector> row_get_mlpp_vector(int p_index_z, int p_index_y) const;
void row_get_into_mlpp_vector(int p_index_y, int p_index_z, Ref<MLPPVector> target) const; void row_get_into_mlpp_vector(int p_index_z, int p_index_y, Ref<MLPPVector> target) const;
void row_set_vector(int p_index_y, int p_index_z, const Vector<real_t> &p_row); void row_set_vector(int p_index_y, int p_index_z, const Vector<real_t> &p_row);
void row_set_pool_vector(int p_index_y, int p_index_z, const PoolRealArray &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<std::vector<std::vector<real_t>>> A); //real_t norm_2(std::vector<std::vector<std::vector<real_t>>> A);
//std::vector<std::vector<real_t>> tensor_vec_mult(std::vector<std::vector<std::vector<real_t>>> A, std::vector<real_t> b); Ref<MLPPMatrix> tensor_vec_mult(const Ref<MLPPVector> &b);
//std::vector<std::vector<std::vector<real_t>>> vector_wise_tensor_product(std::vector<std::vector<std::vector<real_t>>> A, std::vector<std::vector<real_t>> B); //std::vector<std::vector<std::vector<real_t>>> vector_wise_tensor_product(std::vector<std::vector<std::vector<real_t>>> A, std::vector<std::vector<real_t>> B);
public: public: