2D 配列 ( ) の各要素に適用される関数がありますがdouble[,]
、特定の次元に沿ってのみ適用されます。
目的のディメンションをパラメーターとしてメソッドに渡す方法がわからないため、2 つの関数を作成する必要がありました。最終的に、「vertical_foo」関数と「horizontal_foo」関数になりました。これらは互いにほとんど同じです。
private double[,] vertical_foo (double[,] a) {
int height = a.GetLength(0);
int width = a.GetLength(1);
var result = new double[height, weight];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
// Here I use first ("i") dimension
int before = Math.Max(i-1, 0);
int after = Math.Min(i+1, height-1);
result[i,j] = (a[after, j] - a[before, j]) * 0.5;
}
}
return result;
}
private double[,] horizontal_foo (double[,] a) {
int height = a.GetLength(0);
int width = a.GetLength(1);
var result = new double[height, weight];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
// Here I use second ("j") dimension
int before = Math.Max(j-1, 0);
int after = Math.Min(j+1, height-1);
result[i,j] = (a[i, after] - a[i, before]) * 0.5;
}
}
return result;
}
このような署名が必要です。2 番目のパラメーターは、インデックスを適用するディメンションです。
private double[,] general_foo (double[,] a, int dimension) {}
どんな提案でも大歓迎です!