Diciamo che ho il seguente array:parti somma di numpy.array
a = np.array([[1,2,3,4,5,6],
[7,8,9,10,11,12],
[3,5,6,7,8,9]])
voglio sommare i primi due valori della prima fila: 1+2 = 3
, poi prossimi due valori: 3+4 = 7
, e poi 5+6 = 11
, e così via per ogni riga. La mia uscita desiderata è questo:
array([[ 3, 7, 11],
[15, 19, 23],
[ 8, 13, 17]])
Ho la seguente soluzione:
def sum_chunks(x, chunk_size):
rows, cols = x.shape
x = x.reshape(x.size/chunk_size, chunk_size)
return x.sum(axis=1).reshape(rows, cols/chunk_size)
ma ci si sente inutilmente complicato, c'è un modo migliore? Forse un built-in?
Grazie, affettare lavora bello per caso "2", ma sarebbe ancora essere bello per una soluzione generale? – Akavall
Come si generalizza questo? Puoi fare 'np.sum ([a [:, i :: n] per i in xrange (n)], 0)' se potresti dover sommare 'n' colonne consecutive, per esempio. – nneonneo
La tua soluzione è più breve e più facile da leggere, ma l'ho programmata e le mie soluzioni iniziali sono notevolmente più veloci. – Akavall