Как отсортировать группы чисел одновременно - PullRequest
1 голос
/ 30 октября 2019

Здравствуйте, у меня есть пустой массив, и я хочу отсортировать его на основе элементов с индексом по модулю 3, чтобы каждая группа из 3 последовательных элементов (начиная с одного модуля 3 оставалась вместе. Например, для массива [7,3.4,5.6, 4,5.5,1.2, 12,4.4,4.5] числа, которые я хочу упорядочить, - это 7, 4, 12, и следите за двумя числами, идущими сразу после них в том же порядке. Следовательно, в конце я хочу получить следующий массив: [4,5.5,1.2, 7,3.4,5.6, 12,4.4,4.5]. Я могу сделатьс циклами for, но есть ли быстрая встроенная функция, которой я могу воспользоваться? Спасибо!

Ответы [ 2 ]

3 голосов
/ 30 октября 2019

это вариант:

import numpy as np

a = np.array([7, 3.4, 5.6, 4, 5.5, 1.2, 12, 4.4, 4.5])
a = a.reshape((3, 3))
a = a[a[:, 0].argsort()].flatten()
print(a)  # [  4.    5.5   1.2   7.    3.4   5.6  12.    4.4   4.5]

я перезаписываю массив для формирования (3, 3) и затем сортирую только первый столбец (как описано здесь )и снова расплющить его.

1 голос
/ 30 октября 2019

Вы достигнете этого, используя эти np-функции последовательно. Конечно, вы можете объединить их все сразу.

import numpy as np
a = np.array([7,3.4,5.6, 4,5.5,1.2, 12,4.4,4.5])
a = np.array_split(a, 3)
a.sort(key=lambda x: x[0])
a = np.array(a).flatten()

Out: массив ([4., 5.5, 1.2, 7., 3.4, 5.6, 12., 4.4, 4.5])

...