Найти - Пользователи
Полная версия: Циклически сдвинуть элементы массива без выполнения лишних сдвигов
Начало » Центр помощи » Циклически сдвинуть элементы массива без выполнения лишних сдвигов
1
Qwerty16
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)) 
Как еще можно зделать помогите пожалуста ето не правильно
JOHN_16
Я вас не понимаю. Что вы хотите? Какое задание? Что именно за сдвиг? Пример массива до и после преобразования покажите.
Qwerty16
[[8 9 5]
 [9 2 9]
 [2 8 9]]
матрица сдвига на 2 позиции
[[8 9 8]
 [9 5 9]
 [2 9 2]]
r00tl3ss
Первое, что пришло в голову:
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
Опять же, если просто нужно сдвинуть.
JOHN_16
я ожидал найти красивое решение в документации к 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]])
FishHook
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
sander
JOHN_16
плохо искал
Qwerty16
Спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB