2016-06-08 2 views
0

저의 논문을위한 신경망 프로젝트에 MatrixToolkitsJava를 사용하고 있습니다.이 행렬에서 더 큰 가중치 행렬을 만들고 나중에 잠재적으로 더 작게 만들 필요가 있습니다. 지금 현재이 작업을 수행하고있는 방식, 새 값을 인스턴스화하는 동안 기존 값을 복사하는 등의 작업은 대다수의 시간을 차지하면서 매우 비효율적입니다. 기존 행렬에 행과 열을 추가하는 효율적인 방법이 있습니까?행렬을 더 크게 만들기

+0

배열의 크기를 변경할 수있는 방법이 없으므로, 기울기. 아마 arraylists의 arraylist 만들 수 있습니다. – Gendarme

+0

배열을 사용하고 있지 않습니다. MatrixToolkitsJava의 Matrix를 사용하고 있습니다. Matrix의 크기를보다 효율적으로 계산할 수있는 방법이 있는지 또는 Matrix에서 값을 복사하는 방법이 있는지 궁금 할 것입니다. – Beez

답변

0

위에서 설명한대로 목록을 사용할 수 있지만 배열을 사용하여 작동하지 않는 경우 새 배열을 만들고 데이터를 복사 한 다음 저장중인 참조를 바꿀 수있는 메서드를 만들 수 있습니다.

System.arrayCopy(Object src, int srcPos, Object dest, int destPos, int length)을 사용하면 거대한 배열을 사용하지 않는 경우 충분히 빠릅니다.

편집 : 나는 이것을 더 일찍 생각하지 않았다는 것을 믿을 수 없다. 행렬 곱셈을 사용하여 데이터를 복사하면됩니다. 예를 들어 2 by 2 a 3 by 3을 만들려면 [2,2] x [(1,0), (0,1), (0,0)] = [2,3] => [ (1,0,0), (0,1,0)] x [2,3] = [3,3]

+0

그들은 배열이 아니며 계산 상 효율적인 선형 대수학에 필요한 MTJ의 행렬입니다. 그리고 그들은 점점 커지고 있습니다. 이것이 바로 문제입니다. 수천 개의 행/열에 쉽게 도달합니다. 그것이 내가 현재하고있는 일이며, 가지고있는 데이터를 복사하고 새로운 데이터에 추가하는 것이지만, 꽤 비효율적이며 느려지는 경향이있다. 하지만 arrayCopy가 MTJ 행렬에서 작동하는 것은 의심 스럽습니다. – Beez

+0

어쨌든 당신이 그것을 얼마나 필요로하는지 미리 알아 내야합니까? 그렇지 않으면 당신이 생각하는 것보다 훨씬 더 크게 만들 것을 제안 할 것입니다. –

+0

불행히도. 여기에서 목표는 성장 신경망을 만드는 것입니다. 성장 신경망은 적합한 크기를 찾을 수 있기를 바랍니다. 행렬을 필요한 것보다 크게 만드는 또 다른 문제점은 프로그램이 더 많이 느려질수록 커질수록 더 커집니다. 그래서 그것들을 극도로 크게 만들고 채우면 내가하는 것처럼 성장시키는 것보다 느린 프로그램이 될 것입니다. – Beez