首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的转置矩阵

Java中的转置矩阵
EN

Stack Overflow用户
提问于 2020-10-17 19:58:59
回答 2查看 243关注 0票数 0

我想我忽略了关于Java的一些基本内容,我不知道为什么下面的代码不能工作,我的步骤:

  1. 输入为2x2矩阵,
  2. 复制原始矩阵,
  3. 循环通过行然后列,
  4. 将原始矩阵的列值分配给转置矩阵的行。

<

  1. >G29

代码语言:javascript
复制
static void transpose(int[][] matrix) {
    int[][] temp = matrix.clone();
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            matrix[i][j] = temp[j][i];
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-17 20:25:29

问题是使用函数clone(),因为这将创建一个只共享行数组的新矩阵。

使用相同的代码样式,这是有效的:

代码语言:javascript
复制
int[][] temp = new int[2][2];
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
        temp[i][j] = matrix[j][i];
    }
}

注意,由于temp是一个空矩阵,所以比较将是temp = matrix

所以这适用于一个简单的2x2矩阵,但是如果您需要其他维度,而不是

代码语言:javascript
复制
int[][] temp = new int[2][2];

使用

代码语言:javascript
复制
int[][] temp = new int[matrix[0].length][matrix.length];

顺便说一下,更新基准内存的矩阵不是一个好的做法。我认为您的方法应该返回temp矩阵。

一个完整的更新,一个更好的方法可能是这个。几乎和你拥有的一样,但它可以接受不同的长度。

代码语言:javascript
复制
public static int[][] transpose(int [][] matrix){
    int[][] temp = new int[matrix[0].length][matrix.length];
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[i].length; j++) {
            temp[j][i] = matrix[i][j];
        }
    }
    return temp;
}
票数 0
EN

Stack Overflow用户

发布于 2020-12-18 06:31:07

您可以使用IntStream而不是for循环

代码语言:javascript
复制
public static void main(String[] args) {
    int[][] m1 = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}};

    int[][] m2 = transpose(m1);

    Arrays.stream(m2).map(Arrays::toString).forEach(System.out::println);
    // [1, 4, 7]
    // [2, 5, 8]
    // [3, 6, 9]
}
代码语言:javascript
复制
static int[][] transpose(int[][] matrix) {
    return IntStream.range(0, matrix.length).mapToObj(i ->
            IntStream.range(0, matrix[i].length).map(j ->
                    matrix[j][i]).toArray())
            .toArray(int[][]::new);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64406758

复制
相关文章

相似问题

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