Je travaille avec de très grands réseaux. Un problème que je suis en train de traiter est de manquer de RAM pour travailler avec, mais même avant que mon code ne tourne lentement, de sorte que, même si j'avais une RAM infinie, cela prendrait encore trop de temps. Je vais vous donner un peu de mon code pour montrer ce que je suis en train de faire:Efficacité avec de très grands tableaux numpy
#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))
je dois utiliser g et index_stack, dont chacun sont 3millions x 10.000 tableaux 2-D, dans un autre calcul . Chaque itération de cette boucle prend presque 1 seconde, soit 3 millions de secondes au total, ce qui est beaucoup trop long.
Y at-il quelque chose que je peux faire pour que ce calcul s'exécute beaucoup plus rapidement? J'ai essayé de penser comment je pourrais faire sans boucle, mais la seule façon que je puisse imaginer est de faire 3 millions de copies de zfit, ce qui est irréalisable.
Et puis-je travailler avec ces baies en ne gardant pas tout en RAM? Je suis un débutant et tout ce que j'ai cherché à ce sujet est soit hors de propos ou quelque chose que je ne peux pas comprendre. Merci d'avance.
Existe-t-il une valeur dupliquée dans samplez? Ou il ne contient que des valeurs uniques? –
Ils sont tous uniques et en ordre croissant – cracka31
Il existe un problème potentiel dans 'e = zfit [b, index + 1]'. Si la plus petite valeur positive de est le dernier élément, dans n'importe quelle rangée du tableau, '[b, index + 1]' provoquera un 'IndexError' (hors limites). Et la première ligne devrait être 'b = np.arange (len (zfit))' –