Скажем, у меня есть список, содержащий 16 элементов:
lst=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P']
Этот список представляет собой массив 4 x 4, в котором все элементы помещены в одномерный список. В виде массива он имеет следующий вид:
'A', 'B', 'C', 'D'
'E', 'F', 'G', 'H'
'I', 'J', 'K', 'L'
'M', 'N', 'O', 'P'
Я хочу извлечь подматрицу из этого списка 1D как еще один список 1D, который всегда начинается с первого элемента.
например Извлечение матрицы 2 x 2 из lst:
'A', 'B', 'E', 'F'
Или извлечение матрицы 3 x 3 из lst:
'A', 'B', 'C', 'E', 'F', 'G', 'I', 'J', 'K'
Для этого я использую numpy, чтобы изменить размер списка в массив, извлечь подматрицу, а затем снова сгладить:
import numpy as np
# The size of the matrix represented by lst
init_mat = 4
# Desired matrix size to extract
mat_size = 2
A = np.resize(lst,(init_mat,init_mat))
B = A[0:mat_size, 0:mat_size].flatten()
C = map(str,B)
Это работает, но мне было интересно, есть ли более питонический способ сделать это, так как я не думаю, что этот метод будет хорошо масштабироваться с размером матрицы.