生成C++代码,计算两个特征向量的夹角,如果夹角大于90°,则将一个特征量向量方向取反
时间: 2024-05-03 07:19:11 浏览: 195
以下是生成的C++代码:
```c++
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
double dot_product(vector<double> vec1, vector<double> vec2)
{
double result = 0.0;
for (int i = 0; i < vec1.size(); i++) {
result += vec1[i] * vec2[i];
}
return result;
}
double norm(vector<double> vec)
{
double result = 0.0;
for (int i = 0; i < vec.size(); i++) {
result += vec[i] * vec[i];
}
return sqrt(result);
}
double angle_between_vectors(vector<double> vec1, vector<double> vec2)
{
double dot_prod = dot_product(vec1, vec2);
double norm1 = norm(vec1);
double norm2 = norm(vec2);
double cosine = dot_prod / (norm1 * norm2);
return acos(cosine) * 180.0 / M_PI;
}
void reverse_vector(vector<double>& vec)
{
for (int i = 0; i < vec.size(); i++) {
vec[i] = -vec[i];
}
}
int main()
{
vector<double> vec1 = {1.0, 2.0, 3.0};
vector<double> vec2 = {-1.0, -2.0, -3.0};
double angle = angle_between_vectors(vec1, vec2);
cout << "Angle between vectors: " << angle << " degrees" << endl;
if (angle > 90.0) {
reverse_vector(vec1);
cout << "Reversed vector 1: ";
for (int i = 0; i < vec1.size(); i++) {
cout << vec1[i] << " ";
}
cout << endl;
}
return 0;
}
```
这段代码计算了两个特征向量的夹角,并且如果夹角大于90°,则将第一个特征向量方向取反。你可以将 `vec1` 和 `vec2` 替换为你自己的特征向量。注意,这里假设两个特征向量的维度相同。如果不相同,需要在代码中进行相应的修改。
阅读全文