当前位置: 首页 > 面试题库 >

在Java中获取子矩阵的参考

司业
2023-03-14
问题内容

我需要递归地对子矩阵进行并行处理(将原始矩阵分为4个并传递给一个方法)。矩阵存储为2D数组。我不能每次都将元素复制到一个新的矩阵,因为事实证明这是非常昂贵的。是否有某种方式可以引用Java中的子矩阵?

也许,这个问题不清楚,我在[这里]http://codingdict.com/questions/131438)没有得到答案。


问题答案:

我将为int[][]数据编写一个包装器,并将其称为Matrix类。然后写一个方法getSubMatrix(x, y, rows,cols)。这是一个简单的Matrix类:

static class Matrix {
    int[][] data;
    int x, y, columns, rows;

    public Matrix(int[][] data) {
        this(data, 0, 0, data.length, data[0].length);
    }

    private Matrix(int[][] data, int x, int y, int columns, int rows) {
        this.data = data;
        this.x = x;
        this.y = y;
        this.columns = columns;
        this.rows = rows;
    }

    public Matrix getSubMatrix(int x, int y, int columns, int rows) {
        return new Matrix(data, this.x + x , this.y + y, columns, rows);
    }

    public String toString() {

        StringBuffer sb = new StringBuffer();

        for (int i = y; i < x + rows; i++) {
            for (int j = x; j < x + columns; j++)
                sb.append(data[i][j]).append(" ");

            sb.append("\n");
        }
        sb.setLength(sb.length() - 1);

        return sb.toString();
    }
}

这个测试程序…:

public static void main(String[] args) throws IOException {

    int[][] testData = new int[10][10];

    for (int i = 0; i < testData.length; i++) 
        for (int j = 0; j < testData[i].length; j++)
            testData[i][j] = 100 + i + j;

    Matrix full = new Matrix(testData);

    System.out.println("Full test matrix:");
    System.out.println(full);

    System.out.println();

    System.out.println("Part of the matrix:");
    System.out.println(full.getSubMatrix(3, 3, 3, 3));

}

…打印:

Full test matrix:
100 101 102 103 104 105 106 107 108 109 
101 102 103 104 105 106 107 108 109 110 
102 103 104 105 106 107 108 109 110 111 
103 104 105 106 107 108 109 110 111 112 
104 105 106 107 108 109 110 111 112 113 
105 106 107 108 109 110 111 112 113 114 
106 107 108 109 110 111 112 113 114 115 
107 108 109 110 111 112 113 114 115 116 
108 109 110 111 112 113 114 115 116 117 
109 110 111 112 113 114 115 116 117 118

Part of the matrix:
106 107 108 
107 108 109 
108 109 110


 类似资料:
  • 问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准

  • 问题内容: 我试图在OpenGL中使用gluUnProject,首先我需要获取projectoin,model_view和viewort矩阵。根据我在网上找到的例子 但是我收到错误消息“ ValueError:glGetFloatv需要1个参数(pname),收到2:(GL_PROJECTION_MATRIX,[])” 那么,我应该使用什么来获取这些矩阵? 问题答案: 也许: 之后在变量中应该是投

  • 问题内容: 我是一个新手,我很难理解如何从具有定义的列和行的子矩阵中提取内容: 如果要提取列/行0和3,则应具有: 我尝试了所有重塑功能…但是无法弄清楚该怎么做。有任何想法吗? 问题答案: 给 一试: 这将返回您想要的结果:

  • 我需要点子,这不是家庭作业...... 我有下面的矩阵,我如何获得重复数字的坐标, 重复项[[[0,0],[1,0],[2,0],[0,1],[0,1],[0,2],[1,2],[1,3],[2,2]],[[0,3],[0,4],.........] 第1组,分离2组,分离3组,仅2组 重复项[[[0,0],[1,0],[2,0],[0,1],[0,2],[1,2],[1,3],[2,2]],[[

  • 我目前正在做一个音频信号处理项目,需要在Java中的一个复杂矩阵上使用SVD。我当前的线性代数库是Apache Commons。但它只提供实矩阵的SVD,JAMA、JBLAS、EJML、ojAlgo都不支持复杂的SVD。 我一直在用一些技巧从一个等效的实矩阵中找到SVD。然而,当我重建矩阵时,这种技术对于虚部有很大的不准确性。

  • 问题内容: 我对图和邻接矩阵感到困惑。我正在为 一个班级做作业,我有一个节点的文本文件和一个边的文本文件,我必须 阅读它们的每一个并将它们制成一个图,然后可以在该图上执行 操作,例如确定图是否为连接,找到最小的 生成树,遍历并找到路径。但是我之前从未使用过图形 ,并且整个过程让我很困惑,我想知道 是否有人可以帮助我解释其中的一些内容。 首先,我是否要自己建立一个图(也许有节点和边类?) ,然后从中