Вот проблема, которую я пытаюсь решить.Допустим, у нас есть квадратный массив:
In [10]: arr
Out[10]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
То, что я хотел бы иметь, это сгладить этот массив в определенном порядке: сначала я хочу сгладить нижний треугольник вдоль оси-0, а затем выбратьдиагонали, и, наконец, снова сгладить верхний треугольник вдоль оси-0, что, в конечном итоге, даст сглаженный массив следующим образом:
# | lower triangle |diag.elements| upper triangle |
res = np.array([5, 9, 13, 10, 14, 15, 1, 6, 11, 16, 2, 3, 7, 4, 8, 12])
Вот мое частичное решение, которое пока не дает желаемого результата.
In [16]: arr[np.tril(arr, k=-1) != 0]
Out[16]: array([ 5, 9, 10, 13, 14, 15]) # not correct!
In [17]: np.diag(arr)
Out[17]: array([ 1, 6, 11, 16])
In [18]: arr[np.triu(arr, k=1) != 0]
Out[18]: array([ 2, 3, 4, 7, 8, 12]) # not correct!
Наконец, объединить эти 3 промежуточных результата.Как правильно проиндексировать, чтобы получить желаемый результат?В качестве альтернативы, есть ли другие способы решения этой проблемы?