函数`transform_basis`接收两个参数:
1. B:3×3矩阵,表示第一组基向量(每列是一个基向量)
2. C:3×3矩阵,表示第二组基向量(每列是一个基向量)
返回一个的矩阵
。
[[1, 0, 0], [0, 1, 0], [0, 0, 1]] [[1, 1, 0], [0, 1, 1], [1, 0, 1]]
[[0.5, -0.5, 0.5], [0.5, 0.5, -0.5], [-0.5, 0.5, 0.5]]
1.对应的输入、输出已给出,您只用实现核心功能函数即可。
2.支持numpy、scipy、pandas、scikit-learn库。
#include <iostream>
#include <Eigen/Dense>
#include <vector>
// 基向量变换函数
std::vector<std::vector<double>> transform_basis(const std::vector<std::vector<double>>& B, const std::vector<std::vector<double>>& C) {
// 将 std::vector 转换为 Eigen::Matrix
Eigen::MatrixXd eigenB(B.size(), B[0].size());
Eigen::MatrixXd eigenC(C.size(), C[0].size());
for (size_t i = 0; i < B.size(); ++i) {
for (size_t j = 0; j < B[0].size(); ++j) {
eigenB(i, j) = B[i][j];
eigenC(i, j) = C[i][j];
}
}
// 计算 C 的逆矩阵
Eigen::MatrixXd C_inv = eigenC.inverse();
// 计算 P = C_inv * B
Eigen::MatrixXd P = C_inv * eigenB;
// 将结果从 Eigen::Matrix 转换回 std::vector
std::vector<std::vector<double>> result(P.rows(), std::vector<double>(P.cols()));
for (int i = 0; i < P.rows(); ++i) {
for (int j = 0; j < P.cols(); ++j) {
result[i][j] = P(i, j);
}
}
return result;
}