Подразделение ndarray на массив категорий - PullRequest
0 голосов
/ 31 марта 2019

У меня есть такой nudy ndarray:

[
    [1,1,1],
    [2,2,2],
    [3,3,3],
    [4,4,4]
] 

И я хотел бы создать ndarray, который содержит все 4 внутренних массива, разделенных следующим массивом категорий [1,2,3,2]. Я бы хотел, чтобы это выглядело так:

[
    [
        [1,1,1]
    ], 
    [
        [2,2,2],[4,4,4]
    ],
    [
        [3,3,3]
    ]
] 

Есть ли способ сделать это элегантно в Python?

Я задаю этот вопрос, потому что я сгруппировал свой набор данных, используя sklearns KMeans, и теперь я хочу элегантный способ обработки всех элементов каждой категории без слишком большого количества циклов.

1 Ответ

1 голос
/ 31 марта 2019

Вы можете использовать словарь для сопоставления массивов с соответствующими категориями и сбора результатов в конце. Преимущество использования словаря таким образом заключается в том, что он способен обрабатывать категории, которые также выглядят не по порядку.

input_list = [
    [1,1,1],
    [2,2,2],
    [3,3,3],
    [4,4,4]
] 

category = [1, 2, 3, 2]

from collections import defaultdict

temp_dict = defaultdict(list)
#Iterate through each array of input list, and append to temp_dict
for i, arr in zip(category, input_list):
    temp_dict[i].append(arr)

result = list(temp_dict.values())
print(result)
#[[[1, 1, 1]], [[2, 2, 2], [4, 4, 4]], [[3, 3, 3]]]

При желании, если порядок также важен, используйте сортировку по словарным ключам.

result = [x[1] for x in sorted(temp_dict.items())]
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...