코드 최적화를 시도한 후에 마지막 리소스가 여러 코어를 사용하여 아래 코드를 실행하려고 시도하는 것 같습니다. 정확히 어떻게 여러 코어를 사용하여 훨씬 빠르게 실행할 수 있도록 내 코드를 변환/재구성하는 방법을 모르겠습니다. 최종 목표를 달성하기위한 지침을 얻을 수 있다면 감사하겠습니다. 최종 목표는 각 배열이 약 70 만 개의 요소를 보유하고있는 배열 A와 B에 대해이 코드를 가능한 빨리 실행할 수 있도록하는 것입니다. 다음은 작은 배열을 사용하는 코드입니다. 700k 요소 배열은 주석으로 처리됩니다.MATLAB의 "ismember"함수에 해당하는 파이썬
import numpy as np
def ismember(a,b):
for i in a:
index = np.where(b==i)[0]
if index.size == 0:
yield 0
else:
yield index
def f(A, gen_obj):
my_array = np.arange(len(A))
for i in my_array:
my_array[i] = gen_obj.next()
return my_array
#A = np.arange(700000)
#B = np.arange(700000)
A = np.array([3,4,4,3,6])
B = np.array([2,5,2,6,3])
gen_obj = ismember(A,B)
f(A, gen_obj)
print 'done'
# if we print f(A, gen_obj) the output will be: [4 0 0 4 3]
# notice that the output array needs to be kept the same size as array A.
내가 뭘하려고하는 것은 MATLAB 기능으로 포맷 [2] (하나 ismember라고 모방하는 것입니다. [Lia,Locb] = ismember(A,B)
난 그냥 Locb
부분 만 얻기 위해 노력하고
. matlab에 가입일A는 B의 구성원 메인의
아니다 목적지 Locb는 출력 배열 Locb가 0을 포함 B.의 구성원 인 각각의 값에 대한 B의 가장 낮은 인덱스를 포함 문제는 내가 abl 될 필요가있다. 이 작업을 최대한 효율적으로 수행 할 수 있습니다. 테스트를 위해 두 개의 700k 요소 배열이 있습니다. 생성기를 생성하고 생성기의 값을 검토하는 것은 작업을 빨리 완료하지 못하는 것 같습니다.
와우 이것은 정말 빠릅니다! 당신은 당신의 해결책을 얼마나 고맙게 생각하는지 모른다. 고마워요! 성능 프로파일을 출력하기 위해 특정 도구를 사용합니까? – zd5151
@ z5151 아니요, 직접적인 알고리즘 분석입니다. [Big-O 표기법 사용하기] (http://en.wikipedia.org/wiki/Big_O_notation) :'np.where '는'B '의 선형 스캔을 수행해야하는데,'O (len (B))' 작업. 그런 다음 원래 알고리즘을 대략'O (len (A) * len (B))'연산으로 만드는 'O (len (A))'연산을 필요로하는 외부 루프를 사용합니다. 'Bind'를 생성하려면'len (B)'연산이 필요합니다. 사전은 [해시 표] (http://en.wikipedia.org/wiki/Hash_table)로 구현되어 있으며, 일정한'O (1)'검색을하므로 A 검색은'O (len (A))'; 전반적인 복잡성은'O (len (A) + len (B))'입니다. – sfstewman
알았어요. 위키피디아 참조 주셔서 감사합니다. – zd5151