2016-10-17 4 views
1

Я хочу сделать что-то вродеМожете ли вы написать многократную нарезку?

x[i, :, :] = (rhs[i, :, :]-diag[i] * x[i+1, :, :])/diag[i] 

где х и ок являются 3D Numpy массивами размера (T, L, S). diag - это 1D массив размера T.

Это будет правильно транслироваться.

Но теперь я хотел бы написать аналогичную функцию для работы с 2D-массивами или некоторым другим числом измерений. Как я могу написать это в общем случае, чтобы он работал на любом массиве, который имеет первое измерение размера T. Я не хочу дублировать код только с другим количеством двоеточий, поскольку в этой функции много таких строк ,

+0

Вы хотите векторизовать параметр 'T'? То есть, это происходит в цикле 'for i in range (T)? – Eric

+0

Вы имели в виду, что количество осей не гарантируется 3? Это может быть 1, 2, 3, ..., N? – Jeon

ответ

2
x[i] = (rhs[i] - diag[i] * x[i+1])/diag[i] 

Эти двоеточия совершенно не нужны.

+0

Awesome. Благодарю. Не понимал, что это так просто. – Dave31415

+1

Если вам интересно делать что-то подобное, но по последнему измерению вы можете использовать многоточие, подобное 'x [..., i + 1]'. – IanH