나는 아주 큰 배열을 가지고 일하고있다. 물론 다루고있는 문제는 RAM을 다 써 버리는 것입니다.하지만 그 전에도 코드가 느리게 실행되므로 무한한 RAM이 있더라도 너무 오래 걸릴 수 있습니다. 내가 할 노력하고있어 보여 내 코드의 비트를 줄 것이다 :매우 큰 numpy 배열로 효율성
내가 더 계산에 3million X 만 2 차원 배열은 각각의 g 및 index_stack를 사용해야#samplez is a 3 million element 1-D array
#zfit is a 10,000 x 500 2-D array
b = np.arange((len(zfit))
for x in samplez:
a = x-zfit
mask = np.ma.masked_array(a)
mask[a <= 0] = np.ma.masked
index = mask.argmin(axis=1)
# These past 4 lines give me an index array of the smallest positive number
# in x - zift
d = zfit[b,index]
e = zfit[b,index+1]
f = (x-d)/(e-d)
# f is the calculation I am after
if x == samplez[0]:
g = f
index_stack = index
else:
g = np.vstack((g,f))
index_stack = np.vstack((index_stack,index))
. 이 루프의 각 반복에는 거의 1 초가 걸리므로 총 길이는 3 백만 초이므로 길다.
계산이 훨씬 빨라질 수있는 방법이 있습니까? 나는 이것을 for 루프없이 어떻게 할 수 있을지 생각하려고 노력했지만, 내가 상상할 수있는 유일한 방법은 zfit의 3 백만 카피를 만드는 것이다. 이것은 실현 불가능하다.
그리고 어딘가에 RAM에 모든 것을 보관하지 않아도이 어레이로 작업 할 수 있습니까? 나는 초급자이고 내가 찾은 모든 것은 부적절하거나 이해할 수없는 것입니다. 미리 감사드립니다.
samplez에 중복 값이 있습니까? 아니면 고유 한 값만 포함하고 있습니까? –
그들은 모두 독특하고 증가하는 순서입니다. – cracka31
'e = zfit [b, index + 1]'에 잠재적 인 문제가 있습니다. 가장 작은 양수 값이 배열의 임의의 행에서 마지막 원소라면,'[b, index + 1]'은 (Indexerror)를 일으킬 것이다. 첫 번째 줄은'b = np.arange (len (zfit)) '이어야합니다. –