gpt4 book ai didi

c# - 如何取一行二维数组?

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:32 25 4
gpt4 key购买 nike

我想使用 C# 进行双三次插值,但我无法处理数组。

 double cubicInterpolate(double[] p , double x)
{
return p[1] + 0.5 * x * (p[2] - p[0] + x * (2.0 * p[0] - 5.0 * p[1] + 4.0 * p[2] - p[3] + x * (3.0 * (p[1] - p[2]) + p[3] - p[0])));
}

double bicubicInterpolate(double[,] p , double x, double y)
{
double [] arr = new double[4];
arr[0] = cubicInterpolate(p[][0], y);
arr[1] = cubicInterpolate(p[][1], y);
arr[2] = cubicInterpolate(p[][2], y);
arr[3] = cubicInterpolate(p[][3], y);
return cubicInterpolate(arr, x);
}

最佳答案

基本上,你不能。你有一个矩形数组,它是一个内存块。您可以围绕它编写自己的包装器,例如

public RectangularArrayRow<T> : IList<T>
{
private readonly int row;
private readonly T[,] array;

public RectangularArrayRow(T[,] array, int row)
{
// TODO: Validation
this.row = row;
this.array = array;
}

public T this[int index]
{
get { return array[row, index]; }
set { array[row, index] = value; }
}

// etc
}

但是如果你想直接得到一个“子数组”,你需要使用一个锯齿状数组开始:

double[][] array = new double[10][];
for (int i = 0; i < array.Length; i++)
{
array[i] = new double[3];
}
// ...
double[] row = array[0]; // or whatever

因此您的 bicubicInterpolate 方法将变为:

// Note: name changed to to be conventional
double BicubicInterpolate(double[][] p, double x, double y)
{
double[] arr = new double[4];
arr[0] = CubicInterpolate(p[0], y);
arr[1] = CubicInterpolate(p[1], y);
arr[2] = CubicInterpolate(p[2], y);
arr[3] = CubicInterpolate(p[3], y);
return CubicInterpolate(arr, x);
}

关于c# - 如何取一行二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31715917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com