Есть ли функция, которая перетасовывает определенную часть строки и столбца с пустой матрицей в Python? - PullRequest
1 голос
/ 25 марта 2019

У меня есть 2D матрица. Я хочу перемешать последние несколько столбцов и строк, связанных с этими столбцами.

Я пытался использовать np.random.shuffle, но он только перетасовывает столбец, а не строки.

def randomize_the_data(original_matrix, reordering_sz):
    new_matrix = np.transpose(original_matrix)
    np.random.shuffle(new_matrix[reordering_sz:])
    shuffled_matrix = np.transpose(new_matrix)
    print(shuffled_matrix)

a = np.arange(20).reshape(4, 5)
print(a)
print()
randomize_the_data(a, 2)

Моя оригинальная матрица такая:

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

Я получаю это.

[[ 0  1  3  4  2]
 [ 5  6  8  9  7]
 [10 11 13 14 12]
 [15 16 18 19 17]]

Но я хочу что-то подобное.

[[ 0  1  3  2  4]
 [ 5  6  7  8  9]
 [10 11 14 12 13]
 [15 16 17 18 19]]

Другой пример:

Original =

   -1.3702    0.3341   -1.2926   -1.4690   -0.0843
    0.0170    0.0332   -0.1189   -0.0234   -0.0398
   -0.1755    0.2182   -0.0563   -0.1633    0.1081
   -0.0423   -0.0611   -0.8568    0.0184   -0.8866


Randomized =

   -1.3702    0.3341   -0.0843   -1.2926   -1.4690
    0.0170    0.0332   -0.0398   -0.0234   -0.1189
   -0.1755    0.2182   -0.0563    0.1081   -0.1633
   -0.0423   -0.0611    0.0184   -0.8866   -0.8568

1 Ответ

1 голос
/ 25 марта 2019

Чтобы перетасовать последние элементы каждой строки, вы можете пройти каждую строку независимо и перетасовать последние несколько чисел, выполнив перетасовку для каждой строки, каждая строка будет перемешиваться по-разному по сравнению друг с другом, в отличие от того, что было у вас. до того, где каждый ряд был перемешан одинаково.

import numpy as np

def randomize_the_data(original_matrix, reordering_sz):
    for ln in original_matrix:
        np.random.shuffle(ln[reordering_sz:])
    print(original_matrix)

a = np.arange(20).reshape(4, 5)
print(a)
print()
randomize_the_data(a, 2)

ВЫХОД:

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

[[ 0  1  4  2  3]
 [ 5  6  8  7  9]
 [10 11 13 14 12]
 [15 16 17 18 19]]
...