От массива (n, n, n) NumPy до конкретного c 1-мерного извлечения - PullRequest
2 голосов
/ 23 апреля 2020

У меня есть NumPy массив s c формы (n, n, n).

Я хочу сохранить значения sc[i][j][l] для 0 <= i <j <n ( это означает, что я забыл значения массивов, для которых i> = j) и каждый 0 <= l <n в одномерном массиве np. размером m * n, где m = n (n-1) / 2. </p>

Вот моя функция:

def fromScToMt(sc):
    n = sc.shape[0]
    mt = []  # start with an empty python list
    for i in range(0, n - 1):
        for j in range(i + 1, n):
            for l in range(0, n):
                mt.append(sc[i][j][l])  # populate the list with the desired values
    return np.array(mt)  # turn the list into a 1-dimensional numpy array

Какой самый эффективный способ сделать это?

Спасибо! Julien

1 Ответ

2 голосов
/ 23 апреля 2020

Вы можете использовать np.triu_indices() для эффективного получения индексов верхнего треугольника:

fromScToMt(sc)
# array([ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31, 44, 45, 46, 47])

sc[np.triu_indices(n, k=1)].ravel()
# array([ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31, 44, 45, 46, 47])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...