сворачивание куба путем вычитания размеров - PullRequest
0 голосов
/ 12 июня 2019

У меня есть куб, который содержит плотность вероятности на основе 3 переменных формы [t1, t2, gamma] с 80 значениями в каждом направлении. Мне нужно построить график распределения T, гамма. Где Т это t2-t1.

Есть ли какой-нибудь умный способ свернуть этот куб в желаемый результат? Я ломаю себе голову от этого и не могу найти.

1 Ответ

0 голосов
/ 13 июня 2019

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

# make small diagnostic example
nt1, nt2, ngm = 4, 5, 2
data = sum(np.ogrid[1:nt1+1,-1:-nt2-1:-1,100:100*ngm+100:100])
# by construction values are equal if coordinates (T,gamma) are equal, no matter how T = t2-t1 decomposes.
# Fixing gamma, for example at 1, we can see that T is constant along the diagonals
data[..., 1]
# array([[200, 199, 198, 197, 196],
#        [201, 200, 199, 198, 197],
#        [202, 201, 200, 199, 198],
#        [203, 202, 201, 200, 199]])

# now let's transform the example, first recover dimensions
nt1, nt2, ngm = data.shape
# next, zero pad
aux = np.zeros((nt1+2, nt1+nt2-2, ngm), data.dtype)
aux[1:-1, :nt2] = data
# and shear, in this case by incrementing dimension 1
sheared = aux.reshape(-1, ngm)[nt2-1:3-nt1-nt2].reshape(nt1, nt1+nt2-1, ngm)

# check result, for example at gamma = 1
sheared[..., 1]
# array([[  0,   0,   0, 200, 199, 198, 197, 196],
#        [  0,   0, 201, 200, 199, 198, 197,   0],
#        [  0, 202, 201, 200, 199, 198,   0,   0],
#        [203, 202, 201, 200, 199,   0,   0,   0]])


# corresponding values of T are now aligned and ready for further processing.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...