Форум сайта python.su
import numpy as np x = input() a = np.zeros((n, m), dtype=np.int_) for i in range(n): for j in range(m): a[i, j] = int(input('A['+str(i+1)+', '+str(j+1)+'] = ')) print(np.roll(a, x))
Отредактировано Qwerty16 (Апрель 13, 2016 21:01:45)
Офлайн
Я вас не понимаю. Что вы хотите? Какое задание? Что именно за сдвиг? Пример массива до и после преобразования покажите.
Офлайн
[[8 9 5] [9 2 9] [2 8 9]] матрица сдвига на 2 позиции [[8 9 8] [9 5 9] [2 9 2]]
Отредактировано Qwerty16 (Апрель 14, 2016 17:57:04)
Офлайн
Первое, что пришло в голову:
def matrix_shift(m, shift): lr = len(m[0]) tmp = sum(m, []) lm = len(tmp) for _ in range(shift): tmp.insert(0, tmp.pop(lm-1)) mtrx = [] while(tmp): row, tmp = tmp[:lr], tmp[lr:] mtrx.append(row) return mtrx
Офлайн
я ожидал найти красивое решение в документации к NumPy, но не обнаружил, поэтому мой мозг в 2 часа ночи выдал это: (индекс -2 говорит о том что сдвинуть на 2 элемента вперед )
>>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> a_r = a.ravel() >>> a_r array([0, 1, 2, 3, 4, 5, 6, 7, 8]) >>> na = np.hstack((a_r[-2:], a_r[:-2])) >>> na array([7, 8, 0, 1, 2, 3, 4, 5, 6]) >>> result = na.reshape(3, 3) >>> result array([[7, 8, 0], [1, 2, 3], [4, 5, 6]])
Офлайн
m = [[8, 9, 5], [9, 2, 9], [2, 8, 9]] def shift(arr, num): return arr[-num:] + arr[:-num] def flatten(matrix): return sum(matrix, []) def split(arr, num): return list(zip(*[iter(arr)]*num)) res = split(shift(flatten(m), 2), len(m[0])) print res
Офлайн
JOHN_16
плохо искал
Офлайн
Спасибо
Офлайн