我发现我的功能的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
,它们将保留正常。但是从我在文档中看到的内容来看,前一种类型实际上是首选类型。
答案 0 :(得分:1)
文档建议将ILSCope.Enter与输入数组一起使用。 这样可以确保输入数组一直处于活动状态,直到使用块结束并立即处理。
将以下内容添加到函数定义的开头
使用ILScope.Enter(sigmak,uk,vk,t)
{
//函数体在这里
}