Add mju_mulMatTVecSparse to multiply transposed sparse matrix and dense vector.
PiperOrigin-RevId: 688535240 Change-Id: I0bacf1e911cde99014b2dcb0a1434e61a4f41d51
This commit is contained in:
committed by
Copybara-Service
parent
2b0629d75f
commit
94e9912d28
@@ -30,8 +30,9 @@ namespace {
|
||||
using ::testing::ElementsAre;
|
||||
using EngineUtilSparseTest = MujocoTest;
|
||||
|
||||
std::vector<int> AsVector(const int* array, int n) {
|
||||
return std::vector<int>(array, array + n);
|
||||
template <typename T>
|
||||
std::vector<T> AsVector(const T* array, int n) {
|
||||
return std::vector<T>(array, array + n);
|
||||
}
|
||||
|
||||
TEST_F(EngineUtilSparseTest, MjuDot) {
|
||||
@@ -1043,5 +1044,25 @@ TEST_F(EngineUtilSparseTest, MjuCholFactorNNZ) {
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
TEST_F(EngineUtilSparseTest, MjuMulMatTVec) {
|
||||
int nr = 2;
|
||||
int nc = 3;
|
||||
mjtNum mat[] = {1, 2, 0,
|
||||
0, 3, 4};
|
||||
|
||||
mjtNum mat_sparse[6];
|
||||
int rownnz[2];
|
||||
int rowadr[2];
|
||||
int colind[4];
|
||||
mju_dense2sparse(mat_sparse, mat, nr, nc, rownnz, rowadr, colind);
|
||||
|
||||
// multiply: res = mat' * vec
|
||||
mjtNum vec[] = {5, 6};
|
||||
mjtNum res[3];
|
||||
mju_mulMatTVecSparse(res, mat_sparse, vec, nr, nc, rownnz, rowadr, colind);
|
||||
|
||||
EXPECT_THAT(AsVector(res, 3), ElementsAre(5, 28, 24));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace mujoco
|
||||
|
||||
Reference in New Issue
Block a user