90 votes

Partitionner un tableau en N morceaux avec Numpy

Il y a ceci Comment diviser une liste en morceaux de taille égale ? pour diviser un tableau en morceaux. Existe-t-il un moyen de faire cela plus efficacement pour les tableaux géants en utilisant Numpy ?

0voto

Tony Points 728

Cela peut être réalisé en utilisant as_strided de numpy. J'ai donné une réponse en supposant que si la taille des morceaux n'est pas un facteur du nombre total de lignes, alors le reste des lignes dans le dernier lot sera rempli de zéros.

from numpy.lib.stride_tricks import as_strided
def batch_data(test, chunk_count):
  m,n = test.shape
  S = test.itemsize
  if not chunk_count:
    chunk_count = 1
  batch_size = m//chunk_count
# Batches which can be covered fully
  test_batches = as_strided(test, shape=(chunk_count, batch_size, n), strides=(batch_size*n*S,n*S,S)).copy()
  covered = chunk_count*batch_size
  if covered < m:
    rest = test[covered:,:]
    rm, rn = rest.shape
    mismatch = batch_size - rm
    last_batch = np.vstack((rest,np.zeros((mismatch,rn)))).reshape(1,-1,n)
    return np.vstack((test_batches,last_batch))
  return test_batches

Ceci est basé sur ma réponse https://stackoverflow.com/a/68238815/5462372 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X