2017-03-31 5 views
0

4D 희소 행렬 (21x21x21x21)을 사용하고 있습니다. 요소 중 하나만 1로 설정됩니다. 이후에이 행렬을 벡터화하고 0이 아닌 행을 결정합니다. 전체 프로세스는 계산하는데 약 6 분이 소요됩니다. 이 작업을 파이썬에서 효율적으로 수행 할 수있는 방법이 있습니까?효과적으로 파이썬에서 4D 희소 행렬을 만들고 처리하는 방법

sparseMatrix = np.zeros((21,21,21,21), dtype = np.int8) 
#w,x,y,z can be any random integer from 0 to 20. 
w = 3 
x = 5 
y = 18 
z = 16 
sparseMatrix[w, x, y, z] = 1 
sparseMatrix_vec = np.reshape(sparseMatrix, [-1,1]) 
sparseMatrix_vec_index = np.nonzero(sparseMatrix_vec)[0][0] 
+0

프로젝트에서 항상 1 개의 1을 포함하는 21x21x21x21 스파 스 매트릭스로 끝나겠습니까? 이 경우 단순히 데이터 표현을 변경해야한다고 생각합니다. 데이터를 수집하는 프로세스를 사용하여 1의 위치를 ​​간단히 인코딩하십시오. – ma3oun

+0

@ ma3oun, 답장을 보내 주셔서 감사합니다. 이것을 인코딩하는 방법의 예를 들어 줄 수 있습니까? 예, 항상 21x21x21x21 스파 스 매트릭스로 끝납니다. –

+0

tensorflow를 사용하여 스파 스 데이터를 나타낼 수도 있습니다. Tensorflow는 드문 드문 텐서를 지원하며보다 효율적으로 처리됩니다. 자세한 정보는 다음을 참조하십시오. https://www.tensorflow.org/api_docs/python/tf/SparseTensor – ma3oun

답변

1

필요한 경우 (X, Y, Z는 W) (X, Y, Z, W)의 각각은 0과 20 사이에서 변할 수있는 고유 한 정수를 형성하고, 단순히베이스 (21)의 표현을 사용하여 . 찾고있는 정수는 다음과 같습니다.

N = w * (21 ** 0) + x * (21 ** 2) + y * (21 ** 2) + z * (21 ** 3).

정수가 주어지면 정수 나누기 및 모듈러스를 사용하여 (w, x, y, z)로 돌아갈 수 있습니다.