Python конвертировать список в матрицу и получить значение - PullRequest
1 голос
/ 02 апреля 2019

Я довольно новичок в питоне. У меня есть список 16 1 и 0 во вложенном списке.

list([name_of_matrix],[1234567812345678], [another_name],[1234....])

Каждый элемент номера [12345678....] в списке, представляющий матрицу 4x4, подобную этой:

1234
5678
1234
5678

Моя цель - получить доступ к номеру [row, col]. Например, [2,3] будет строка 2, столбец 3, то есть 7. Как мне преобразовать список, чтобы добиться этого? Спасибо заранее.

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

Во-первых, вы должны разложить вложенные list в dict, где ключами являются строки, представляющие имена, а значения являются целыми числами:

nested_list = [['first'], [1234567812345678], ['second'], [1234432109877890]]
raw_dict = {k[0]: v[0] for k, v in zip(nested_list[::2], nested_list[1::2])}

Теперь мы хотим повернуть каждые 16-разрядное число во что-то, что может лучше представлять матрицу.numpy - это один из способов, но давайте пока остановимся на базовом Python.

Заметьте, что если мы конвертируем каждое целое число в строку, каждый 4-символьный фрагмент будет представлять строку матрицы.Соответственно:

def to_matrix(i):
    string = str(i)
    return [[int(element) for element in string[i:i + 4]] for i in range(0, 16, 4)]

matrix_dict = {k: to_matrix(v) for k, v in raw_dict.items()}

Теперь наш dict имеет значения, вложенные lists, которые представляют собой матрицы:

print(matrix_dict)

Вывод:

{'first': [[1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4], [5, 6, 7, 8]], 'second': [[1, 2, 3, 4], [4, 3, 2, 1], [0, 9, 8, 7], [7, 8, 9, 0]]}

Мы можемполучить доступ к произвольному элементу с помощью цепной индексации:

print(matrix_dict['first'][3][2])

Вывод:

7

EDIT : В случае, когда мы не хотим различать списки,тогда мы можем просто сделать это:

matrices = [to_matrix(element[0]) for element in nested_list if isinstance(element[0], int)]
0 голосов
/ 02 апреля 2019

Вам просто нужно передать список в виде строки методу list и создать из этого списка пустой массив с типами с плавающей запятой:

my_matrix = np.array(list('1234567812345678'),dtype=float).reshape((4,4))

Теперь вы можете получить к нему доступ:

my_matrix[2,3] #output 4
0 голосов
/ 02 апреля 2019

Вы можете использовать словарь:

my_matrix_collection = {
    'name_one' : np.array([[1,2,3,4],[5,6,7,8],[1,2,3,4],[5,6,7,8]]),
    'name_two' : np.array([[10,20,30,40],[50,60,70,80],[10,20,30,40],[50,60,70,80]])
}

Теперь вы можете получить доступ к элементам матрицы определенной матрицы, например:

my_matrix_collection['name_one'][2,3] #output 4

Чтобы получить словарь my_matrix_collectionиз вашего списка (назовем это my_list), сделайте:

my_matrix_collection = {} #create an empty dictionary
for i in range(len(my_list)//2):
    my_matrix_collection[my_list[2*i]] = np.array(list(my_list[2*i+1]),dtype=float)).reshape((4,4)) #populate the empty dictionary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...