2017-02-08 5 views
2

Я борюсь с довольно легкой вещью, но, к сожалению, я не могу ее решить. У меня есть элементы матрицы 64x64, как вы можете видеть на изображении. Где красные нули и зелень значения Я интересуюсь.1D вектор из нижней части диагонали в матрице [Python]

enter image description here

Я хотел бы, чтобы в конечном итоге только с нижней треугольной части под диагональными (зеленый значений) в один массив.

Я использую Python 2.7

Спасибо большое,

Майкл

ответ

0

Предполагая, что вы можете вытащить ваши данные в Numpy массив, используйте функцию tril_indices. Похоже, что ваши данные не включают главной диагонали, так что вы можете перейти от -1

data = np.arange(4096).reshape(64, 64) 
inds = np.tril_indices(64, -1) 
vals = data[inds] 
0

Вы можете использовать np.tril_indices, который возвращает показатели нижней треугольной части матрицы с заданной формой, индексы могут быть в дальнейшем используется для извлечения значений из матрицы, предположим, что ваша матрица называется arr:

arr[np.tril_indices(n=64,m=64)] 

You может обеспечить параметр дополнительное смещение, если вы хотите, чтобы исключить диагональ:

arr[np.tril_indices(n = 64, m = 64, k = -1)] 

Пример:

arr = np.array([list(range(i, 5+i)) for i in range(5)]) 
arr 
#array([[0, 1, 2, 3, 4], 
#  [1, 2, 3, 4, 5], 
#  [2, 3, 4, 5, 6], 
#  [3, 4, 5, 6, 7], 
#  [4, 5, 6, 7, 8]]) 

arr[np.tril_indices(n = 5, m = 5)] 
# array([0, 1, 2, 2, 3, 4, 3, 4, 5, 6, 4, 5, 6, 7, 8]) 
0

Два времени быстрее, чем triu на этом примере:

np.concatenate([arr[i,:i] for i in range(1,n)])