如何将数组从9列调整为3列?

问题描述 投票:0回答:1

我有一个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']]

谢谢。

python numpy
1个回答
0
投票

您的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']]
© www.soinside.com 2019 - 2024. All rights reserved.