Ho esaminato le documentazioni e anche altre domande qui, ma sembra che io non abbiate ancora il blocco di subsetting in array numpy.Compensazione di un array numpy 2D
Ho un array di NumPy, e per amor di discussione, lascia che sia definita come segue:
import numpy as np
a = np.arange(100)
a.shape = (10,10)
# array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
# [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
# [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
# [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
# [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
# [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
# [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
# [80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
# [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
ora voglio scegliere righe e colonne di a
specificati da vettori n1
e n2
. Come esempio:
n1 = range(5)
n2 = range(5)
Ma quando uso:
b = a[n1,n2]
# array([ 0, 11, 22, 33, 44])
Poi vengono scelti solo i primi elementi diagonali quinto, non l'intero blocco 5x5. La soluzione che ho trovato è quello di fare in questo modo:
b = a[n1,:]
b = b[:,n2]
# array([[ 0, 1, 2, 3, 4],
# [10, 11, 12, 13, 14],
# [20, 21, 22, 23, 24],
# [30, 31, 32, 33, 34],
# [40, 41, 42, 43, 44]])
Ma io sono sicuro che ci dovrebbe essere un modo per fare questo compito semplice in un solo comando.
Grazie per le vostre spiegazioni. Essendo più familiare con MATLAB, trovo la convenzione di subsetting in numpy un po 'strana, ma almeno ora so come farlo nel modo giusto. – CrossEntropy