Обратный (перевернутый) порядок значений в антидиагоналях неквадратного массива без использования циклов PythonPython

Программы на Python
Anonymous
Обратный (перевернутый) порядок значений в антидиагоналях неквадратного массива без использования циклов Python

Сообщение Anonymous »

Мне нужен код Python, способный менять порядок значений в каждой антидиагонали массива с помощью numpy.
Я уже пробовал различные комбинации np.rot90 , np.fliplr, np.transpose, np.flipud, но ни один из них не может дать мне исходную форму массива 5x3 со всеми перевернутыми антидиагоналями.
Есть идеи, как это сделать?
Пример:

Код: Выделить всё

[[ 1  2  4]
[ 3  5  7]
[ 6  8 10]
[ 9 11 13]
[12 14 15]]
Должно стать:

Код: Выделить всё

[[ 1  3  6]
[ 2  5  9]
[ 4  8 12]
[ 7 11 14]
[10 13 15]]
Полагаю, это должно быть легко, но почему-то мне до сих пор не удалось найти, как эффективно сделать это с массивами с миллионами значений.

Вдохновленный уже предоставленными ответами (статус 2024-05-23 11:37 CET) и переосмыслением того, каким будет наиболее эффективный способ выполнения необходимого преобразования, кажется, что предоставление простой функции, принимающей два индекса: Столбец-X, значения в массиве и возврат необходимых индексов для доступа к массиву, как если бы он был перевернут/перевернут по диагоналям, обеспечит самые быстрые результаты. С помощью такой функции для перевернутой версии массива по диагоналям можно будет получать правильные значения без каких-либо операций с массивом, как это легко, как в тривиальном случае, показанном ниже:

Код: Выделить всё

>>> srcArr
array([[ 1,  2,  3,  4,  5,  6],
[ 7,  8,  9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> def oneBasedXY(column, row):
...     return ( row - 1, column - 1 )
...
>>> srcArr[oneBasedXY(3,4)]
21
>>> srcArr[(3,4)]
23
С этой точки зрения вопрос сводится к предоставлению кода для функции returnIndicesWhichCanBeUsedToObtainValuesOfTheArrayWithRreversedRightLeftDiagonals()


Подробнее здесь: https://stackoverflow.com/questions/785 ... ay-without

Вернуться в «Python»