我有一个功能签名,如:
static public double[][] G2Sweep(int row1, int row2, double[][] mtx)
{
mtx = (float) mtx;
}
但我需要将double [] []矩阵转换为浮点值。这是如何完成的,因为代码无法显式转换它?
答案 0 :(得分:5)
public static float[][] Convert(double[][] mtx)
{
var floatMtx = new float[mtx.Length][];
for (int i = 0; i < mtx.Length; i++)
{
floatMtx[i] = new float[mtx[i].Length];
for (int j = 0; j < mtx[i].Length; j++)
floatMtx[i][j] = (float)mtx[i][j];
}
return floatMtx;
}
或者:
public static float[][] Convert(double[][] mtx)
{
return mtx.Select(i => i.Select(j => (float)j).ToArray()).ToArray();
}
答案 1 :(得分:4)
不,你不能将double转换为float,特别是对于数组。您需要创建具有正确类型的副本。
答案 2 :(得分:1)
是的所有值都要浮动,但我不想做一个for循环来重复所有
嗯,抱歉,但你不能。将数组转换为float
(或int
,或String
,或MonkeyPoo
或其他类型的类型是没有意义的。如果你需要查看数组中的每个值,那么你需要一个循环。没有绕过那个事实。
Lamdas以及诸如此类的东西都归结为循环。你只需要咬住子弹A和转换循环(或使用像.Cast<float>
之类的东西),或者使用正确的类型开始。
答案 3 :(得分:1)
确实你 cant 转换到位并且你必须遍历这些值。
然而,现在说内存便宜是公平的。
创建double [] []变量时;为什么不简单地同时创建一个float [] [],所以转换是在一个地方完成的。
在生命周期的其余部分中,您可以将写入数组用于写入任务。
那说,你能澄清为什么你需要一个独特的浮点数和双数组吗?
*公平但不一定可以接受;如果它是一个托管在自己的盒子或虚拟图像上的webapp;那很好。如果这是一个独立的应用程序,可能必须在上网本或某个地方的Silverlight上工作,这是不公平或没有。
答案 4 :(得分:1)
另一种方法是使用Array.ConvertAll方法:
Array.ConvertAll<double, float>(doubles, d => (float)d);
是否进行相同的循环和显式转换,但看起来更好。
答案 5 :(得分:-1)
如果使用Linq,可以避免手动编写循环。
float[][] floats = mtx.Select(r=>r.Select(Convert.ToSingle).ToArray()).ToArray();
编辑:修复。