在C++中,将无符号整数的二维矩阵展平为二重



我有一个2D矩阵,它有28个值:unsigned int CorrelatedF_int[j][k];,j=4,k=7。我想把这个矩阵转换成一个二重矩阵:double CorrelatedF_int[27];。该双精度应包含所有28个值,每个值乘以1000。我在这个网站上搜索了一下,但没有找到任何可以帮助我解决问题的答案。那么我该如何进行转换呢?由于我是C++的初学者,任何帮助都将不胜感激。

扁平数组中假定的基于行的顺序:

constexpr int M = 4;
constexpr int N = 7;
unsigned int ui_arr[M][N];
double d_arr[M * N] = { 0 };
for (int i = 0; i < M * N; ++i)
d_arr[i] = 1000 * ui_arr[i / N][i % N];

您没有指定行和列的数量,所以我将使用n和m。你可以做一些类似的事情


double arr[28];
int k=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
arr[k]=(double)matrix[i][j]*1000;
k++;
}

其中arr是双值数组。

C++20范围样式:

template<size_t N, size_t M>
std::array<double, N*M> join_to_double_array(const std::array<std::array<int, N>, M>& a)
{
std::array<double, N*M> result;
using std::ranges::views::join;
std::ranges::copy(a | join, result.begin());
return result;
}

https://godbolt.org/z/9a7KTK

最新更新