Различия вычитания матриц в Python и Java - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблема с вычитанием матрицы в Python и Java.Я проделал одинаковые шаги на обоих языках программирования, но результаты разные.

import numpy as np
array1 = [[1,3], [5,6],[7,8]]
array1 = np.transpose(array1)

array2 = [[1,0,1]]
array3 = np.subtract(array2,array1)
print(array3)

, который выводится в виде матрицы:

[[ 0 -5 -6]
[-2 -6 -7]]

Это работает нормально и так, как мне нужно.Но мне нужен этот вывод в Java.Поэтому я попробовал следующий фрагмент кода:

double [][] array1 = new double[][]{
        {1,2},
        {3,4},
        {5,6}
    }; 

double [][] array2 = new double[][]{
        {1,0,1}
    };

array1 = np.T(array1);
double [][] vysl = np.subtract(array2, array1);

, где

public static double[][] subtract(double[][] a, double[][] b) {
    int m = a.length;
    int n = a[0].length;
    double[][] c = new double[m][n];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            c[i][j] = a[i][j] - b[i][j];
        }
    }
    return c;
}

 public static double[][] T(double[][] a) {
    int m = a.length;
    int n = a[0].length;
    double[][] b = new double[n][m];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            b[j][i] = a[i][j];
        }
    }
    return b;
}

Но результат другой матрицы:

for (int i = 0; i < vysl.length; i++)
    {
        for (int y = 0; y < vysl[0].length; y++)
            System.out.print(vysl[i][y] + " ");
        System.out.println("");
    }

0.0 -3.0 -4.0 

Я отобразил матрицу сэтот 2D цикл.Эта матрица имеет только 1 строку с 3 столбцами, но предыдущая матрица из pythom имела 2 строки и 3 столбца.Подскажите, пожалуйста, что я делаю неправильно, как я могу получить матрицу с 2 строками и 3 столбцами в Java?Как я могу реализовать правила вещания в Java?

1 Ответ

0 голосов
/ 01 марта 2019

Я мог видеть проблему в вашем коде ... для вашего случая следующий код дает ожидаемый результат

public static void main(String[] args) {
        double[][] array1 = new double[][] { { 1, 3 }, { 5, 6 }, { 7, 8 } };

        double[][] array2 = new double[][] { { 1, 0, 1 } };

        array1 = np(array1);
        double[][] vysl = subtract(array2, array1);
        System.out.println("complete");
    }


    public static double[][] np(double[][] a) {
        int x = a.length;
        int y = a[0].length;

       double[][] c = new double[y][x];


        for (int i = 0; i < y; i++) {
            for (int j = 0; j < x; j++) {
               c[i][j] = a[j][i];

            }
        }

        return c;
    }

    public static double[][] subtract(double[][] a, double[][] b) {
        int m = b.length;
        int n = b[0].length;
        double[][] c = new double[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                c[i][j] = a[0][j] - b[i][j];
            }
        }
        return c;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...