Как изменить форму массива с 9 столбцов на 3 столбца? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть массив np, который содержит 9 элементов в каждой строке.

data = [[array([['C', 'F', 'G']], dtype=object),
  array([['C', 'F', 'G']], dtype=object),
  array([['B', 'G', 'H']], dtype=object),
  array([['C', 'H', None]], dtype=object),
  array([['E', 'I', None]], dtype=object),
  array([['A', 'E', None]], dtype=object),
  array([['E', 'J', None]], dtype=object),
  array([['B', 'C', 'I']], dtype=object),
  array([['D', None, None]], dtype=object)],
 [array([['C', 'F', 'G']], dtype=object),
  array([['C', 'F', 'G']], dtype=object),
  array([['B', 'G', 'H']], dtype=object),
  array([['C', 'H', None]], dtype=object),
  array([['E', 'I', None]], dtype=object),
  array([['E', 'J', None]], dtype=object),
  array([['A', 'E', None]], dtype=object),
  array([['B', 'C', 'I']], dtype=object),
  array([['D', None, None]], dtype=object)],
 [array([['C', 'F', 'G']], dtype=object),
  array([['C', 'F', 'G']], dtype=object),
  array([['B', 'G', 'H']], dtype=object),
  array([['C', 'H', None]], dtype=object),
  array([['E', 'I', None]], dtype=object),
  array([['B', 'C', 'I']], dtype=object),
  array([['A', 'E', None]], dtype=object),
  array([['E', 'J', None]], dtype=object),
  array([['D', None, None]], dtype=object)]]

Я хочу изменить форму массива с 9 столбцов на 3 столбца. С 1-го по 3-й - это группа 1, с 4-го по 6-й - группа 2, а с 7-го по 9-й - это группа 3. Например:

data[0,]
output:
#Duplicates were also deleted
[['B','C','F','G','H'],['A','C','E','H','I'],['B','C','D','E','I','J']]

Спасибо.

1 Ответ

0 голосов
/ 28 мая 2020

Ваш data имеет ненужные измерения и смешивает массивы numpy и список. Наверное, лучше хранить свои данные в формате full_array.

>>> import numpy as np
>>> from numpy import array
>>> full_array = np.squeeze(np.array(data))
>>> full_array
array([[['C', 'F', 'G'],
        ['C', 'F', 'G'],
        ['B', 'G', 'H'],
        ['C', 'H', None],
        ['E', 'I', None],
        ['A', 'E', None],
        ['E', 'J', None],
        ['B', 'C', 'I'],
        ['D', None, None]],

       [['C', 'F', 'G'],
        ['C', 'F', 'G'],
        ['B', 'G', 'H'],
        ['C', 'H', None],
        ['E', 'I', None],
        ['E', 'J', None],
        ['A', 'E', None],
        ['B', 'C', 'I'],
        ['D', None, None]],

       [['C', 'F', 'G'],
        ['C', 'F', 'G'],
        ['B', 'G', 'H'],
        ['C', 'H', None],
        ['E', 'I', None],
        ['B', 'C', 'I'],
        ['A', 'E', None],
        ['E', 'J', None],
        ['D', None, None]]], dtype=object)
>>> reshaped = full_array.reshape(full_array.shape[0], 3, -1)
>>> reshaped
array([[['C', 'F', 'G', 'C', 'F', 'G', 'B', 'G', 'H'],
        ['C', 'H', None, 'E', 'I', None, 'A', 'E', None],
        ['E', 'J', None, 'B', 'C', 'I', 'D', None, None]],

       [['C', 'F', 'G', 'C', 'F', 'G', 'B', 'G', 'H'],
        ['C', 'H', None, 'E', 'I', None, 'E', 'J', None],
        ['A', 'E', None, 'B', 'C', 'I', 'D', None, None]],

       [['C', 'F', 'G', 'C', 'F', 'G', 'B', 'G', 'H'],
        ['C', 'H', None, 'E', 'I', None, 'B', 'C', 'I'],
        ['A', 'E', None, 'E', 'J', None, 'D', None, None]]], dtype=object)
>>> answer = [list(filter(bool, set(a))) for b in reshaped for a in b]
>>> answer
[['H', 'F', 'C', 'G', 'B'], ['E', 'H', 'C', 'A', 'I'], ['E', 'C', 'I', 'D', 'J', 'B'], ['H', 'F', 'C', 'G', 'B'], ['E', 'H', 'C', 'J', 'I'], ['E', 'C', 'A', 'D', 'I', 'B'], ['H', 'F', 'C', 'G', 'B'], ['E', 'H', 'C', 'I', 'B'], ['E', 'A', 'D', 'J']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...