Массив сдвига Python NumPy
В этом руководстве будут представлены методы сдвига массива NumPy.
Массив сдвига NumPy с методом np.roll()
Если мы хотим сдвинуть элементы массива NumPy вправо или влево, мы можем использовать метод numpy.roll() в Python. Метод numpy.roll() используется для прокрутки элементов массива по заданной оси. Он берет массив и количество мест, на которое мы хотим сдвинуть элементы массива, и возвращает сдвинутый массив. Если мы хотим сдвинуть элементы вправо, мы должны использовать положительное целое число в качестве значения сдвига. Если мы хотим сдвинуть элементы влево, мы должны указать отрицательное значение сдвига. В следующем примере кода показано, как сдвигать элементы массива с помощью метода numpy.roll() .
Please enable JavaScript
Сначала мы создали массив с помощью функции np.array() . Затем мы сдвинули элементы вправо с помощью функции np.roll() и сохранили полученный массив внутри array_new .
Массив сдвига NumPy с методом нарезки в Python
Если мы хотим сдвинуть элементы вправо или влево и заменить сдвинутые индексы постоянным значением, мы должны использовать метод нарезки массива в Python. Мы можем создать новый пустой массив, как и наш исходный массив. Если значение сдвига положительное, мы заполняем левую часть массива постоянным значением, а если значение сдвига отрицательное, мы заполняем правую часть массива постоянным значением. Затем мы можем заполнить оставшиеся индексы нашего нового массива значениями из исходного массива. В следующем примере кода показано, как сдвигать элементы массива с помощью метода нарезки массива.
Мы определили функцию shift() , которая сдвигает элементы нашего массива на три позиции влево, используя метод нарезки массива в приведенном выше коде. Сначала мы создали наш исходный массив с помощью метода np.array() . Затем мы указали количество индексов num , на которые мы хотим сдвинуть элементы нашего массива, и постоянное значение fill_value , которым мы хотим заменить все сдвинутые индексы. В конце мы передали эти значения в функцию shift() , которая создает новый массив result , подобный нашему исходному массиву с функцией np.empty_like(arr) , сохраняет сдвинутые элементы и печатает сдвинутый массив..
Массив NumPy Shift с функцией shift() Внутри библиотеки scipy.ndimage.interpolation в Python
Метод shift() внутри библиотеки scipy.ndimage.interpolation используется для сдвига массива с использованием метода интерполяции сплайном в Python. В отличие от метода numpy.roll() , метод shift() может одновременно сдвигать массив и заменять сдвинутые индексы заданным постоянным значением. Функция shift() принимает исходный массив, количество индексов, которые мы хотим сдвинуть, и постоянное значение, которое мы хотим заменить сдвинутыми индексами в качестве входных параметров, и возвращает сдвинутый массив, в котором каждый сдвинутый индекс заменяется указанным постоянное значение. В следующем примере кода показано, как сдвигать элементы массива с помощью функции shift() .
Мы сдвинули элементы array на три позиции вправо и заменили сдвинутые индексы на 0 с помощью функции shift() в приведенном выше коде. Сначала мы создали наш массив с помощью функции np.array() . Затем мы использовали функцию сдвига, чтобы сдвинуть массив вправо на 3 разряда и заменить первые три индекса исходного массива постоянным значением 0 . Мы сохранили вывод функции shift() внутри массива result . В итоге мы распечатали значения внутри массива result .
Все эти методы отлично работают. Если мы хотим только сдвинуть значения внутри массива и не хотим заменять сдвинутые индексы постоянным значением, мы должны использовать функцию numpy.roll() . С другой стороны, если мы хотим заменить смещенные индексы на конкретное постоянное значение, метод нарезки массива является самым быстрым методом для этой операции. Метод нарезки массива быстрее, но немного сложнее, чем использование функции shift() в библиотеке scipy . Если нас не волнует производительность нашего кода, мы можем использовать функцию shift() для этой задачи.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
Python: смещение элементов в списке вправо и смещение элемента в конце списка в начало
Вы можете использовать отрицательные индексы вместе со списком конкатенаций:
Если у вас аллергия на нотацию среза: a.insert(0,a.pop())
Простое использование синтаксиса среза:
Обобщенная версия со сменными сдвигами:
Вы можете просто вырезать последний элемент из списка, а затем добавить его в начало нового списка:
Вопрос, кажется, подразумевает, что сам список должен быть изменен, а не новый созданный список. Таким образом, простой алгоритм:
Если вы действительно хотите сдвинуть элементы, вы можете использовать modulo для циклического переключения списка и переназначения элементов в их смещенные позиции:
Если вам нужна только одна смена, просто сдвиньте последний элемент вперед, расширяя список:
Как выполнить циклический сдвиг на n шагов?
Привет!
не получается выполнить циклический сдвиг на n шагов
Пример:
В ответе должно быть так : lohel
Подскажите, пожалуйста, где ошибка?
Нашел ответ:
print (a[-s::]+a[:-s])
- Вопрос задан более трёх лет назад
- 2691 просмотр
Оценить 3 комментария
- Вконтакте

print (a[len(a)-s:] + a[:-s])
или просто
print (a[-s:] + a[:-s])
Нужно внимательно учитывать индексы: в начальной позиции указания диапазона нужно указывать тот элемент который будет первым, а конечная позиция — указывается элемент, который будет ЗА последним.
Что бы работало с любым шагом полезно смещение нормализовать по модулю длинны:
Name already in use
coursera-python-basics / Циклический сдвиг вправо.py /
- Go to file T
- Go to line L
- Go to definition R
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters