将两个数组的值相乘(人工神经元)
Multiply values from two arrays (Artificial Neuron)
////////////////////MAKE INPUT VALUES////////////////////
double *NumOfInputsPointer = NULL;
std::cout << "How many inputs?" << 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 << "What is the value for input " << 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。
我碰壁了,这让我在输入值数组与其权重数组相乘时苦苦挣扎,然后将它们保存在另一个数组中以便稍后加在一起,然后通过修饰符。
我的难题在于乘法并将其保存到数组中。我希望我已经很好地解释了我的问题。
这段代码有很多问题。我强烈建议使用 std::vector 而不是数组。如果每个输入的权重恒定为 0.5,那么创建一个所有元素均为 0.5 的数组有什么意义呢?只需创建一个表示 0.5 权重的常量变量并将其应用于每个输入。据我所知,第二个数组是不必要的。创建最后一个数组(同样,使用向量会更容易)与第一个数组类似,因为大小将相同。它基于输入的数量。所以只需创建一个相同大小的数组,遍历第一个数组中的每个元素,使用我上面描述的常量进行乘法运算,然后将结果存储到新数组中。
只是 new
就像你对其他人所做的那样,并将乘法结果存储在那里。
MultiplyPointer = new double[NumOfInputs];
for (a = 0; a < NumOfInputs; a++) {
MultiplyPointer[a] = NumOfWeightsPointer[a] * NumOfInputsPointer[a];
}
也就是说,有更好的方法可以解决您的问题。 std::vector
已被提及,这使得内存管理和循环位更容易。我会更进一步,合并一个包含矩阵和矩阵表达式概念的库,例如 OpenCV or 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));
////////////////////MAKE INPUT VALUES////////////////////
double *NumOfInputsPointer = NULL;
std::cout << "How many inputs?" << 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 << "What is the value for input " << 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。
我碰壁了,这让我在输入值数组与其权重数组相乘时苦苦挣扎,然后将它们保存在另一个数组中以便稍后加在一起,然后通过修饰符。
我的难题在于乘法并将其保存到数组中。我希望我已经很好地解释了我的问题。
这段代码有很多问题。我强烈建议使用 std::vector 而不是数组。如果每个输入的权重恒定为 0.5,那么创建一个所有元素均为 0.5 的数组有什么意义呢?只需创建一个表示 0.5 权重的常量变量并将其应用于每个输入。据我所知,第二个数组是不必要的。创建最后一个数组(同样,使用向量会更容易)与第一个数组类似,因为大小将相同。它基于输入的数量。所以只需创建一个相同大小的数组,遍历第一个数组中的每个元素,使用我上面描述的常量进行乘法运算,然后将结果存储到新数组中。
只是 new
就像你对其他人所做的那样,并将乘法结果存储在那里。
MultiplyPointer = new double[NumOfInputs];
for (a = 0; a < NumOfInputs; a++) {
MultiplyPointer[a] = NumOfWeightsPointer[a] * NumOfInputsPointer[a];
}
也就是说,有更好的方法可以解决您的问题。 std::vector
已被提及,这使得内存管理和循环位更容易。我会更进一步,合并一个包含矩阵和矩阵表达式概念的库,例如 OpenCV or 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));