Являются ли они способом разделения одного двумерного массива на несколько одномерных массивов различной формы с использованием первого столбца в качестве индекса? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь разделить двумерный массив с numy на несколько 1d массивов 2-го столбца, используя первый столбец в качестве индекса. массив 2d очень большой (2 100 000)

В основном у меня есть массив, который выглядит следующим образом (просто намного больше):

[[1,a]
 [1,a2]
 [1,a3]
  ....
 [100,b]
 [100,b2]]

Я хочу разделить его на два массива, которые выглядят как

[a,a2,a3]

и

[b,b2]

Я даже не уверен, с чего начать или искать, и очень признателен за любую помощь

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Вы можете использовать np.flatnonzero (или np.nonzero или np.where) и np.diff, чтобы найти границы блоков, а затем разделить, используя np.split:

# create example
x = np.c_[np.repeat(*sum(np.ogrid[:2, 1:4])), 1:10]
x
# array([[1, 1],
#        [1, 2],
#        [2, 3],
#        [2, 4],
#        [2, 5],
#        [3, 6],
#        [3, 7],
#        [3, 8],
#        [3, 9]])
np.split(x[:, 1], np.flatnonzero(np.diff(x[:, 0])) + 1)
# [array([1, 2]), array([3, 4, 5]), array([6, 7, 8, 9])]
0 голосов
/ 14 апреля 2019

Вы ищете itertools.groupby.Вам необходимо указать функцию key, которая указывает, как группировать элементы в вашем вложенном list (в данном случае по первому элементу).В этом случае мы можем использовать itemgetter.

В соответствии с вашими требованиями, вы хотите, чтобы каждая группа содержала только второй элемент исходных данных, поэтому itemgetter также может помочь в этом.

from itertools import groupby
from operator import itemgetter

data = [[1, 'a'],
        [1, 'b'],
        [1, 'c'],
        [2, 'a'],
        [2, 'b'],
        [3, 'c']]

result = {key: list(map(itemgetter(1), group)) for key, group in groupby(data, key=itemgetter(0))}

print(result)

Вывод:

{1: ['a', 'b', 'c'], 2: ['a', 'b'], 3: ['c']}

Обратите внимание, что сначала вы должны отсортировать входные данные, вложенные list, если ключи уже не в порядке, в противном случае они будут разбиты на несколько групп с одним и тем же ключом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...