我有一个float [n,128]数组。现在我想将每一行转换为一个单独的向量,如下所示:
//这里的代码是伪代码
int n=48;
float[,] arrFloat=new float[n,128];
VectorOfFloat v1 = new VectorOfFloat(128); // Vn equals to number of n
v1= arrFloat[0];
v2=arrFloat[1]
.
.
.
.
Vn
什么是优化方式?
我可以编写如下代码,但我认为应该有更好的方法:
List<VectorOfFloat> descriptorVec = new List<VectorOfFloat>();
VectorOfFloat v1 = new VectorOfFloat();
var temp = new float[128];
for (int i = 0; i < descriptors1.GetLength(0); i++)
{
for (int j = 0; j < descriptors1.GetLength(1); j++)
{
temp[j] = descriptors1[0, j];
}
v1.Push(temp);
descriptorVec.Add(v1);
}
答案 0 :(得分:3)
您可以使用Buffer.BlockCopy或ArrayCopy,而不是手动为
分配每个值 static float[][] ToVectors(float[,] matrix)
{
var array = new float[matrix.GetLength(0)][];
for (int i = 0; i < array.Length; i++)
{
array[i]=new float[matrix.GetLength(1)];
Buffer.BlockCopy(matrix, i * matrix.GetLength(1), array[i], 0, matrix.GetLength(1) * sizeof(float));
}
return array;
}