Как извлечь верхние значения из всего трехмерного массива в Python - PullRequest
3 голосов
/ 15 октября 2019

Можно ли извлечь верхние значения из всего трехмерного массива? Простой пример трехмерного массива приведен ниже:

import numpy as np

a = np.array([[[7, 4, 2], [5, 0, 4], [0, 0, 5]],
               [[7, 6, 1], [3, 9, 5], [0, 8, 7]],
               [[8, 10, 3], [1, 2, 15], [9, 0, 1]]]) 

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Вы можете использовать numpy матрицы здания функции, такие как numpy.triu (верхний треугольник) или numpy.tril (нижний треугольник) для возвратакопия матрицы с обнуленными элементами выше или ниже k-й диагонали.

Если, с другой стороны, вас интересуют только значения выше или ниже диагонали (без копии матрицы), вы можете просто использовать numpy.triu_indices и numpy.tril_indices , как указано ниже:

upper_index = np.triu_indices(n=3, k=1)

, где n - размер массивов, для которых возвращаемые индексы будут действительными, и k диагональное смещение.

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

(array([0, 0, 1], dtype=int64), array([1, 2, 2], dtype=int64))

теперь вы можете использовать индексы, полученные в качестве индексов вашего массива, и вы получите:

a[upper_index]

и дает:

array([[5, 0, 4],
       [0, 0, 5],
       [0, 8, 7]])

Аналогично вы можете найти деталь под диагональю, используя numpy.tril_indices.

0 голосов
/ 15 октября 2019

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

result = a[np.triu_indices(3)]
print(result)

Выход

[[7 4 2]
 [5 0 4]
 [0 0 5]
 [3 9 5]
 [0 8 7]
 [9 0 1]]

Если вы хотите, чтобы те, которые строго выше диагонали,Вы можете передать значение смещения:

result = a[np.triu_indices(3, 1)]
print(result)

Выход

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