2017-09-29 1 views
0

의 계산 I 오전 임의의 정수를 생성하고 자신의 바이너리 repsentation로 변환 다음 코드 제공 :속도 최대 numpy.asarray

import sys 
import random 
import numpy 

num = 500000 
M = list(set([random.randint(0, 2 ** 64) for i in range(num)])) 
M = [('{0:016b}').format(i) for i in M] 
M = numpy.asarray([list(map(int, list(i))) for i in M]) 

num는 2000 만까지 100 만에서 모든 값이 될 수 있습니다. 마지막 줄인 M = np.asarray([list(map(int, list(i))) for i in M])은 계산 시간이 가장 많이 걸리는 곳입니다. 어떻게 속도를 높일 수 있습니까? 모든 제안을 부탁드립니다.

답변

0

num=5으로, 당신의 코드는

In [62]: M 
Out[62]: 
array([ list([1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0]), 
     list([1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1]), 
     list([1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1]), 
     list([1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0]), 
     list([1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0])], dtype=object) 
In [63]: M.shape 
Out[63]: (5,) 
In [64]: len(M[0]) 
Out[64]: 64 
In [65]: [len(m) for m in M] 
Out[65]: [64, 64, 64, 62, 64] 

M 본질적으로 1D 객체 배열, 영광/저하 된 목록을 생성합니다. 구성 요소는 목록입니다. 그것들은 길이가 다르므로 배열은 2 차원 (정수)이 될 수 없습니다.

마지막 줄의 대부분은 목록 이해에 있지만 asarray 호출은 아닙니다.