У меня есть следующая проблема нарезания в numpy.Обрезка нескольких строк по одному индексу
a = np.arange(36).reshape(-1,4)
a
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]])
В моей задаче всегда три строки представляют один образец, в моих координатах.
Я хочу, чтобы получить доступ к этой матрицы таким образом, что, если я использую [0: 2], чтобы получить следующее:
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]]
Таковы первые две координируют образцы. Мне нужно извлечь большое количество этих наборов координат из массива.
Благодаря
Основываясь на How do you split a list into evenly sized chunks?, я нашел следующее решение, которое дает мне желаемый результат.
def chunks(l, n, indices):
return np.vstack([l[idx*n:idx*n+n] for idx in indices])
chunks(a,3,[0,2])
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[24, 25, 26, 27],
[28, 29, 30, 31],
[32, 33, 34, 35]])
Возможно, это решение может быть улучшено, и кому-то не потребуется штабелирование.
возможно дубликат [Как вы разделяете список в куски равномерного размера в Python?] (http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python) – mhlester
Просто сделайте это ' a [0: 2 * 3] 'в общем' a [i * 3, j * 3] ' –
' .reshape (-1,3,4) ' – M4rtini