Это может быть реализовано с помощью циклов и условий, но есть быстрый эффективный способ сделать это с использованием Python и numpy, так как я работаю с матрицами, имеющими сто тысяч строк.Строки матрицы сдвига имеют максимумы в середине
В качестве примера мы имеем небольшой матрицу с 3 рядами
1, 3, 4, 10, 2, 4, 1
2, 4, 10, 1, 1, 1, 2
1, 4, 7, 5, 4, 10, 1
В результате, я хочу иметь строки циклического сдвига таким образом, что максимум каждой строки находится в среднем
1, 3, 4, 10, 2, 4, 1
2, 2, 4, 10, 1, 1, 1
7, 5, 4, 10, 1, 1, 4
То, что я думал о том, что-то вроде этого:
middle = matrix.shape[1]/2
for row in range(0, matrix.shape[0]):
max_index = np.argmax(matrix[row, :])
np.roll(matrix[row, :], middle-max_index)
Я думаю Argmax может извлечь ll максимальные индексы для всех строк. Но как применить другой сдвиг к каждой строке, np.roll не обеспечивает такую функциональность, как shift должен быть int, а не массив.
Вы можете преобразовать это хороший вопрос, предоставляя код, который вы пробовали так далеко! – Kasramvd
Я отредактировал мой вопрос. – Mehdi