在java中求矩阵的平均值

在java中求矩阵的平均值,java,arrays,Java,Arrays,如何求二维矩阵(5×5)中每8个元素的平均值,并将其替换为元素数(9) 在java编程(OOP)中 在第一个代码中,应该是 例如: (来源:)伪代码,因为这不是一个真正针对Java的问题: var myMatrix = [ [ x, x, x, x, x], [ x, x, x, x, x], [ x, x, x, x, x], [ x, x, x, x, x], [ x, x, x, x, x] ]; function neighborAverage(row, col)

如何求二维矩阵(5×5)中每8个元素的平均值,并将其替换为元素数(9)

在java编程(OOP)中

在第一个代码中,应该是 例如:



(来源:)

伪代码,因为这不是一个真正针对Java的问题:

var myMatrix = [
  [ x, x, x, x, x],
  [ x, x, x, x, x],
  [ x, x, x, x, x],
  [ x, x, x, x, x],
  [ x, x, x, x, x] ];

function neighborAverage(row, col) {
  return (( myMatrix[row-1][col-1] +
            myMatrix[row-1][col] +
            myMatrix[row-1][col+1] +
            myMatrix[row][col-1] +
            // skip the center element
            myMatrix[row][col+1] +
            myMatrix[row+1][col-1] +
            myMatrix[row+1][col] +
            myMatrix[row+1][col+1]) / 8));
}

function matrixAverage() {
  return ([
    [ neighborAverage(1, 1), neighborAverage(1, 2), neighborAverage(1, 3) ],
    [ neighborAverage(2, 1), neighborAverage(2, 2), neighborAverage(2, 3) ],
    [ neighborAverage(3, 1), neighborAverage(3, 2), neighborAverage(3, 3) ] ]);
}
注二:

  • matrixAverage()
    中的硬编码索引意味着此伪代码仅适用于大小为5x5的矩阵。但是,将该函数推广到任何大小的矩阵上应该不会太难

  • 此伪代码计算所有平均值,但不覆盖原始矩阵中的任何值。这可能是您想要的,也可能不是您想要的,因为您没有指定是否应使用每个新值来计算后续值(如果是,应以什么顺序计算值)


所以我这么做只是为了好玩,下面是我的代码。它适用于任何大小的矩阵

public class Matrixer
{

    final double[][] matrix, computedMatrix;
    final int rows, cols;

    public Matrixer(int N, int M, final double[][] imatrix)
    {
        rows = N;
        cols = M;
        matrix = imatrix;
        computedMatrix = new double[N][M];
    }

    public void computeAverages()
    {
        for (int i = 1; i < rows - 1; i++)
        {
            for (int j = 1; j < cols - 1; j++)
            {
                computedMatrix[i][j] = cellNeighborsAverage(i, j);
            }
        }
    }

    private double cellNeighborsAverage(int row, int col)
    {
        // Ignore center cell
        double sum = matrix[row - 1][col - 1] + matrix[row - 1][col]
                + matrix[row - 1][col + 1] + matrix[row][col - 1]
                + matrix[row][col + 1] + matrix[row + 1][col - 1]
                + matrix[row + 1][col] + matrix[row + 1][col + 1];
        return sum / 8;
    }

    public void printComputedMatrix()
    {
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                System.out.printf("%.2f", computedMatrix[i][j]);
                System.out.print(", ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args)
    {
        final double[][] matrix =
        {
            {1, 2, 3, 4, 5},
            {5, 4, 3, 5, 1},
            {3, 2, 2, 3, 4},
            {2, 3, 4, 5, 3},
            {3, 2, 4, 5, 6},
        };

        Matrixer mx = new Matrixer(5, 5, matrix);
        mx.computeAverages();
        mx.printComputedMatrix();
    }
}

我想你说的是矩阵卷积,我真希望有某种代码(或伪代码)与之配套。我真的很喜欢这个问题和图片。向我们展示您尝试过的内容,以便我可以对此进行投票。|=^]@控制论者Werkgurorc等人:请看前面提到的
ConvolveOp
。您需要给我们提供更多信息。你的矩阵是如何表示的?一维阵列还是二维阵列?它是整数还是浮点数还是一些自定义项?我不知道如何添加代码,但这是我的主程序代码
0.00, 0.00, 0.00, 0.00, 0.00, 
0.00, 2.63, 3.13, 3.13, 0.00, 
0.00, 3.25, 3.63, 3.38, 0.00, 
0.00, 2.75, 3.25, 3.88, 0.00, 
0.00, 0.00, 0.00, 0.00, 0.00