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 ?
Réponse
Trop de publicités?
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 .
- Réponses précédentes
- Plus de réponses