将展平矩阵乘以向量

Multiply flatten matrix by a vector

本文关键字:向量      更新时间:2023-10-16

我最初有一个 3x3 矩阵,我把它展平了(所以现在我有一个 1D 数组,它从最初的 3x3 矩阵中一行接一行(,我必须将其乘以 3x1 向量。知道我该怎么做吗?我不知道如何进行迭代。我正在用 c++ 做这件事。

这是一个非常简单的解决方案,使用扁平矩阵,并且没有任何边界检查以保持简单:

#include <iostream>
#include <vector>
struct matrix2d
{
std::vector<float> v_;
size_t x_, y_;
};
std::vector<float> mult3x3(const matrix2d &m, const std::vector<float> &v)
{
std::vector<float> result;
for (size_t i=0; i< m.y_; i++)
{
float r = 0.0;
for (size_t j=0; j< m.x_; j++)
r += m.v_[i*m.x_+j]*v[j];
result.push_back(r);
}
return result;
}
int main()
{
matrix2d m {.v_ = {1,2,3, 1,2,3, 1,2,3}, .x_=3, .y_=3};
std::vector<float> v { 1,2,1};
std::vector<float> result = mult3x3(m, v);
for (size_t i=0; i< result.size(); i++)
std::cout << result[i] << ", " << std::endl;
return 0;
}

在这里看到它