2016-12-23 2 views
0

matrixMult()이라는 Java 클래스가 있는데, 하나는 Matrix에 1과 0을 채우고, 다른 하나는 3 개의 배열을 받고, 2 개를 곱한 다음 배열에 결과를 반환합니다.파이썬에서 자이 썬을 사용하여 자바 메소드 호출하기.

import java.util.Timer; 

public class matrixMult { 

//Method to populate Matrices with 1's and 0's// 
public static int [][] populatingMatrices(int A [] []) 
{ 
    for (int i = 0; i < A.length; i++) 
    { 
     for (int j = 0; j < A[0].length; j++) 
     { 
      if (i == j) 
      { 
       A[i][j] = 1; 
      } 
      else 
      { 
       A[i][j] = 0; 
      } 
     } 
    //Returns Matrix populated with 1's and 0's// 
    }return A; 
} 

//Method to multiply Identity Matrices// 
public static int [][] mmm (int a [][], int b [][], int c [][]) 
{ 
    int nr; 
    int nc; 

    nr = nc = a.length; 

    for (int i = 0; i < nr; i++) 
    { 
     for (int j = 0; j < nr ; j++) 
     { 
      for (int k = 0;k < nr ;k++) 
      { 
       c[i][j] = c[i][j] + a[i][k] * b[k][j];  
      } 
     } 
    } 
    return c; 
} 

은} 그럼, 파이썬 스크립트, 나는 "matrixMult"를 수입하고있어 썼다. 3 개의 다차원 배열을 만들고, populatingMatrices() 메서드를 사용하여 2 개를 채우고 mmm() 메서드를 사용하여 곱하고 작업 시간을 지정합니다. 내가 타이밍을했으면

import timeit 
import matrixMult 

#matrixMult Object# 
a = matrixMult() 

listA = [[]] 
listB = [[]] 
listC = [[]] 

#Populating matrices# 
a.populatingMatrices(listA) 
a.populatingMatrices(listB) 
a.populatingMatrices(listC) 

#Timing the Matrix Multiplication# 
start_time = timeit.default_timer() 
listC = a.mmm(listA,listB,listC) 
elapsed = timeit.default_timer() - start_time 

print elapsed 

는 계획의 gnuplot을 사용하여 플롯 세 가지 다른 작업 (선형, 이차 및 입방)의 비용을 비교하는 것입니다.

나는이 오류가 명령 줄을 통해 파이썬 스크립을 실행하려고하면 :

File "mmmPY.py", line 20, in <module> 
listC = a.mmm(listA,listB,listC) 
at matrixMult.mmm(matrixMult.java:40) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm 
    at java.lang.reflect.Method.invoke(Method.java:606) 

java.lang.ArrayIndexOutOfBoundsException: java.lang.ArrayIndexOutOfBoundsException: 0 

내 생각은 배열이 비어 있으며, 그들은이 populatingMatrices() 방법으로 채워지고하지 않을 것입니다.

누구나 해결 방법을 찾았습니까? 내가 파이썬에서 최고의 자바 프로그래머가 아닌 멍청하다고 말하는 것은 안전합니다. 그러나 저는이 문제에 대해 정말로 머리를 터지게하지 못합니다.

다시 도움 주셔서 감사합니다.

답변

0

생각의 모든

에서 보낸 목록에 대한
#Populating matrices# 
a.populatingMatrices(listA) 
a.populatingMatrices(listB) 
a.populatingMatrices(listC) 

길이가 자바 그것을 제어 할 때 길이가 다음 java.lang.ArrayIndexOutOfBoundsException: 0

을 던져 정도로, 그것은 0 본다 초기화되지 않습니다