Многое перепробовал, но объект так и не хранит массивы, после их заполнения

Решил создать нейронную сеть с нуля...

Код

Или тут:

#include <iostream>
#include <vector>
#include <cmath>
typedef unsigned int uint;
class Neuron {
public:
  int countInput = 0;
  std::vector<std::vector<double>> input;
  std::vector<std::vector<double>> weight;
  double output = 0;

  Neuron() {}
  Neuron(std::vector<std::vector<double>>&);


  double result();
};


Neuron::Neuron(std::vector<std::vector<double>>& inp) {
  srand(time(0));
  this->countInput = (int)inp[0].size();
  for (uint i = 0; i < countInput; i++) {
    input.push_back(std::vector<double>());
    weight.push_back(std::vector<double>());
    for (uint j = 0; j < countInput; j++) {
      input[i].push_back(inp[i][j]);
      weight[i].push_back(0.5);
    }
  }
}
double Neuron::result() {
  output = 0;
  std::cout << this->input.size();
  for (uint i = 0; i < countInput; i++) {
    for (uint j = 0; j < countInput; i++) {
      output += input[i][j] * weight[i][j];
    }
  }
  return output;
}

Ответы (1 шт):

Автор решения: Harry

Что значит "не хранит"? Как вы проверяете/убеждаетесь?

Но в любом случае - зачем вообще все эти сложности? Почему бы не написать просто

Neuron::Neuron(std::vector<std::vector<double>>& inp)
    :input(inp), weight(inp.size(),vector<double>(inp[0].size(),0.5)){}

Еще у вас есть ошибка и непонятка...

Ошибка - в цикле

for (uint j = 0; j < countInput; i++)

проверяете j, а увеличиваете i и пытаетесь потом работать с несуществующим вектором... Видимо, происходящий при этом этот слет программы вы и называете "не хранит массивы"?

Непонятка - зачем вызывать srand в конструкторе? Критично, чтобы после каждого нового объекта последовательность случайных чисел повторялась (вряд ли время за секунду успеет за это время перескочить...)?

→ Ссылка