Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2016 20:56:17

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

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)

Офлайн

#2 Апрель 13, 2016 22:46:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

Я вас не понимаю. Что вы хотите? Какое задание? Что именно за сдвиг? Пример массива до и после преобразования покажите.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Апрель 14, 2016 17:56:28

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

[[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)

Офлайн

#4 Апрель 14, 2016 21:08:44

r00tl3ss
Зарегистрирован: 2016-03-31
Сообщения: 25
Репутация: +  5  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

Первое, что пришло в голову:

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
Опять же, если просто нужно сдвинуть.

Офлайн

#5 Апрель 15, 2016 02:05:23

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

я ожидал найти красивое решение в документации к 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]])



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Апрель 15, 2016 05:43:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

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



Офлайн

#7 Апрель 15, 2016 09:30:25

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

Офлайн

#8 Апрель 19, 2016 18:56:04

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

Циклически сдвинуть элементы массива без выполнения лишних сдвигов

Спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version