Questo sarà sempre selezionare il primo e l'ultimo elemento:
which_idxs = lambda m, n: np.rint(np.linspace(1, n, min(m,n)) - 1).astype(int)
evenly_spaced = np.array(your_list)[which_idxs(m,n)]
Ciò selezionare solo un massimo di n elementi, nel caso in cui m è maggiore di n. Se veramente si vuole ugualmente diffuse in tutta la matrice, anche alle estremità, allora sarebbe questo, invece:
which_idxs = lambda m, n: [idx for idx in np.rint(np.linspace(1-n/(2*min(m,n)), n+n/(2*min(m,n)), min(m,n)+2) - 1).astype(int) if idx in range(n)]
evenly_spaced = np.array(your_list)[which_idxs(m,n)]
che ti dà qualcosa di simile:
>>> np.array([1, 2, 3, 'a', 'b', 'c'])[which_idxs(m,n)]
Out: array(['2', 'b'])
fonte
2018-03-10 02:42:24
cosa è sbagliato con la scelta del primo ' m' elementi? sembra che ci sia qualche limite che stai insinuando c'è, ma non l'hai descritto. –
Intendi assumere posizioni 'm' distribuite uniformemente su' n'? – hamstergene
Grazie. Deve essere giusto - ho bisogno di ugualmente molti da ogni sottosezione - cioè da ogni parte dell'array originale. Deve essere distribuito. – j13r