#python #arrays #numpy
Вопрос:
У меня есть следующая проблема, связанная с нарезкой массивов.
У меня есть массив формы:
a = [0,1,2,3,4,5,6,7,8,9,10]
и я хотел бы извлечь массив, подобный этому:
b = [8,9,10,0,1,2,3]
.
Я попытался использовать обычное объявление типа: b = a[-3:3]
но оно возвращает пустой массив, так как оно превышает предел массива.
Я не могу понять, как я могу извлечь этот массив в правильной перестановке.
Комментарии:
1. Является ли ваша система индексации циклической? Я думаю, что для этого вам придется написать функцию.
2. Да, я тоже понял это сейчас. На данный момент я могу работать с ответом, данным NMme, хотя.
3. Извините, я думал, что это пустые массивы, а не списки.
4. Предложите изменить заголовок на «список срезов», а не на «массив срезов».
Ответ №1:
Вы можете просто объединить фрагменты списка, которые вы ищете:
b = a[-3:] a[:4]
Ответ №2:
В вашем примере вы сохраняете все элементы массива. Для этого существует функция, называемая roll
.
>>> import numpy as np
>>> a = [0,1,2,3,4,5,6,7,8,9,10]
>>> np.roll(a, 3)
array([ 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7])
Вы также можете использовать отрицательное число для броска в другую сторону:
>>> np.roll(a, -3)
array([ 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2])