首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中M*N矩阵的位置矩阵转置不可能?

Java中M*N矩阵的位置矩阵转置不可能?
EN

Stack Overflow用户
提问于 2016-08-02 17:32:25
回答 2查看 2.3K关注 0票数 0

在Java中可以对M*N矩阵进行就地矩阵转置吗?我认为这在Java中是不可能的,因为在3*5矩阵中,在3*5处的元素最好是在5*3处与元素交换,但这样的位置并不存在。也就是说,C/C++是可能的,因为内存是连续的。

此外,还有其他算法,比如发布的M*N矩阵的这里算法,我认为这些算法不适用于Java,但是它与在Ai上用Aj交换元素有什么不同,因为上面链接中的滚动窗口算法都需要辅助内存?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-02 17:50:14

你得小心这个词。严格地说,转置算符“创建”了一个具有潜在新维度的新矩阵。在您所链接的文章中,就地只意味着对初始矩阵和最终矩阵使用相同的内存,当然,使用巧妙的表示是可能的。

一个简单的解决方案可能是:

代码语言:javascript
运行
复制
public class Matrix {
    private int[][] backingArray;
    private boolean transposed;
    public Matrix(int[][] _backingArray) {
        this.backingArray = _backingArray
    }

    public Matrix(int[] data, rows, columns) {
        backingArray = new int[rows][columns]
        for (int i = 0; i < rows; i++)
            for (int j = 0; j < columns; j++)
                backingArray[i][j] = data[i*columns + j]
    }

    public int getElement(i, j) {
        if (transposed)
            return backingArray[j][i];
        return backingArray[i][j];
    }

    public void transpose() {
        transpose = !transpose;
    }
}

编辑:纠正了一些错误的语法

编辑:这样就可以按照操作问题(?)读取一维矩阵。

票数 2
EN

Stack Overflow用户

发布于 2016-08-02 17:39:17

在Java中,一旦创建了一个数组,它的长度是固定的。所以,如果M和N是不同的,你就不能交换它们

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38726997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档