////////////////////MAKE INPUT VALUES////////////////////double *NumOfInputsPointer = NULL;std::cout << "有多少个输入?" << std::endl;int NumOfInputs;std::cin >> NumOfInputs;NumOfInputsPointer = new double[NumOfInputs];std::cout << std::endl;double InputVal;for(int a = 0; a < NumOfInputs; a++){ std::cout << "输入" << a << "的值是多少?" << std::endl; a+1; std::cin >> InputVal; *(NumOfInputsPointer + a) = InputVal;}std::cout << std::endl;////////////////////MAKE WEIGHTS////////////////////double *NumOfWeightsPointer = NULL; int NumOfWeights;NumOfWeightsPointer = new double[NumOfWeights];double WightVal;for(int a = 0; a < NumOfInputs; a++){ *(NumOfWeightsPointer + a) = 0.5;}////////////////////Multiplication BRAIN BROKE!!!!!////////////////////double *MultiplyPointer = NULL;MultiplyPointer = NumOfInputsPointer;for(int a = 0; a < NumOfInputs; a++){ //Stuff to do things }
上面的代码将会创建一个单一人工神经元。我已经构建了代码来创建一个数组,包含用户所需的输入数量,并自动将每个输入的权重设为0.5。
我遇到的障碍导致我在处理输入值数组与其权重数组相乘时遇到了困难,然后将这些结果保存到另一个数组中,以便稍后进行相加并通过一个修改器处理。
我的困难在于乘法操作和将结果保存到数组中。我希望我已经足够清楚地解释了我的问题。
回答:
就像你对其他数组所做的那样,使用new
来创建它,并将乘法的结果存储在那里。
MultiplyPointer = new double[NumOfInputs];for (a = 0; a < NumOfInputs; a++) { MultiplyPointer[a] = NumOfWeightsPointer[a] * NumOfInputsPointer[a];}
尽管如此,解决你的问题还有更好的方法。有人提到了std::vector
,它可以使内存管理和循环部分变得更简单。我会更进一步,引入一个包含矩阵和矩阵表达概念的库,例如OpenCV或dlib。
使用OpenCV中的Mat
的示例:
cv::Mat input(NumOfInputs, 1, CV_64F, NumOfInputsPointer);cv::Mat weights(NumOfInputs, 1, CV_64F, cv::Scalar(0.5));cv::Mat result = input.mul(weights);
如果权重向量不需要被修改和重用,可以跳过整个过程:
cv::Mat result = input.mul(cv::Scalar(0.5));