Как поменять местами значения в трехмерном массиве в Python? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть матрица (3x5), где случайным образом выбирается число в этой матрице. Я хочу поменять местами выбранный номер на один внизу-вправо. Я могу найти индекс случайно выбранного числа, но не знаю, как заменить его тем, что внизу справа. Например, учитывая матрицу:

[[169 107 229 317 236]
 [202 124 114 280 106]
 [306 135 396 218 373]]

и выбранное число 280 (которое находится в позиции [1,3]), необходимо заменить на 373 в [2,4]. У меня проблемы с перемещением по индексу. Я могу жестко запрограммировать это, но это становится немного сложнее, когда число для обмена выбирается случайным образом.

Если выбранное число находится на [0,0], то жестко запрограммированное будет выглядеть так:

selected_task = tard_generator1[0,0]
right_swap = tard_generator1[1,1]
tard_generator1[1,1] = selected_task
tard_generator1[0,0] = right_swap

Любые предложения приветствуются!

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Попробуйте следующее:

import numpy as np

def swap_rdi(mat, index):
    row, col = index
    rows, cols = mat.shape
    assert(row + 1 != rows and col + 1 != cols)
    mat[row, col], mat[row+1, col+1] = mat[row+1, col+1], mat[row, col]
    return

Пример:

mat = np.matrix([[1,2,3], [4,5,6]])
print('Before:\n{}'.format(mat))
print('After:\n{}'.format(swap_rdi(mat, (0,1))))

Вывод:

Before:
  [[1 2 3]
   [4 5 6]]

After:
  [[1 6 3]
   [4 5 2]]    
0 голосов
/ 05 мая 2020

Как насчет того, что вроде

chosen = (1, 2)
right_down = chosen[0] + 1, chosen[1] + 1

matrix[chosen], matrix[right_down] = matrix[right_down], matrix[chosen]

выведет:

>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
>>> index = (1, 2)
>>> right_down = index[0] + 1, index[1] + 1
>>> a[index], a[right_down] = a[right_down], a[index]
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6, 13,  8,  9],
       [10, 11, 12,  7, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

Должна быть проверка границ, но она опущена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...