我正在使用 Buffer.BlockCopy 从向量(一维数组)X 创建一个 N x M 矩阵(二维数组)Y。
double[] X = new double[N];
double[,] Y = new double[N, M];
for (int i = 0; i < N; ii++)
{
X[ii] = ii;
}
for (int targetRow = 0; targetRow < N; targetRow++)
{
Buffer.BlockCopy
(
X, // source vector
targetRow * sizeof(double), // source vector offset
Y, // target 2D array
(targetRow * M) * sizeof(double), // target array offset
((N - targetRow) > M ? M : (N - targetRow)) * sizeof(double) // count
);
}
我还想使用 Buffer.BlockCopy 来创建该矩阵的转置。我很难确定代码的计数部分。
double[,] YT = new double[M, N];
for (int targetRow = 0; targetRow < N; targetRow++)
{
Buffer.BlockCopy
(
X, // source vector
targetRow * sizeof(double), // source vector offset
YT, // target (destination) 2D array
(targetRow * N) * sizeof(double), // target array offset
(N - targetRow) * sizeof(double) // count
);
}
我已经尝试了许多变化,我已经盯着这个看了一段时间。任何建议将不胜感激。我宁愿不使用循环。感谢您提供的任何建议或帮助。
问题似乎是我需要遍历所有 N 行 X 尚未在 Buffer.BlockCopy 中创建转置我需要停在 M 行。
编辑:
我想我已经弄清楚了: Buffer.BlockCopy 需要如下所示:
double[,] YT = new double[M, N];
for (int targetRow = 0; targetRow < M; targetRow++)
{
Buffer.BlockCopy
(
X, // source vector
targetRow * sizeof(double), // source vector offset
YT, // target (destination) 2D array
(targetRow * N) * sizeof(double), // target array offset
(N - targetRow) * sizeof(double) // count
);
}