IS Numeric In Array参数在首次使用后被丢弃

时间:2014-04-15 01:53:42

标签: c# ilnumerics

我发现我的功能的InArray参数将在首次使用后处理。例如:

        static ILArray<double> UpdateU(
        ILInArray<double> sigmaK, ILInArray<double> uK, ILInArray<double> vK,
        ILInArray<double> t, ILOutArray<double> outU, ILOutArray<double> outV)
    {
        var q = t.Size[0];
        var m = uK.Size[0];
        var k = uK.Size[1];
        var n = vK.Size[0];

        ILArray<double> hBottom = multiply(t, vK);
        ILArray<double> h = zeros(k + q, k);
        h["0:" + (k - 1), full] = sigmaK[full, full];
        h[k + ":end", full] = hBottom[full, full];

        ILArray<double> uH = empty();
        ILArray<double> vH = empty();
        ILArray<double> sigmaH = svd(h, uH, vH);

        ILArray<double> broadenUK = zeros(m + q, k + q);
        broadenUK["0:" + (m - 1), "0:" + (k - 1)] = uK[full, full];
        broadenUK[m + ":end", k + ":end"] = eye(q, q)[full, full];

        outU.a = multiply(broadenUK, uH);
        outV.a = multiply(vK, vH);

        return sigmaH;
    } 

变量t和vK位于行

之后
ILArray<double> hBottom = multiply(t, vK);

所以是因为我的代码遗漏了什么?谢谢!

更新:如果我将t和vK的参数声明从ILInArray更改为ILArray,它们将保留正常。但是从我在文档中看到的内容来看,前一种类型实际上是首选类型。

1 个答案:

答案 0 :(得分:1)

文档建议将ILSCope.Enter与输入数组一起使用。 这样可以确保输入数组一直处于活动状态,直到使用块结束并立即处理。

将以下内容添加到函数定义的开头

使用ILScope.Enter(sigmak,uk,vk,t)

{

//函数体在这里

}