Как объединить несколько строк последовательно в массиве numpy? - PullRequest
1 голос
/ 16 февраля 2020

У меня есть такие данные, как

data = [array(['a', 'b', 'c']), 
        array([['d', 'e', 'f'], ['g', 'h', 'i']]), 
        array([['j', 'k', 'l'], ['m', 'n', 'o'], ['p', 'q', 'r']])]

Я хочу объединить значения во внутреннем списке последовательно. Это желаемый вывод, который мне нужен.

[['a', 'b', 'c'], ['d g', 'e h', 'f i'], ['j m p', 'k n q', 'l o r']]

Я пытался использовать несколько циклов и объединение, но это не дает мне требуемого вывода.

for i in data:
    for j in i:
        print(" ".join(j))

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

Ответы [ 3 ]

3 голосов
/ 17 февраля 2020
In [300]: [np.array([' '.join(ij) for ij in zip(*np.atleast_2d(row))]) for row in data]        
Out[300]: 
[array(['a', 'b', 'c'], dtype='<U1'),
 array(['d g', 'e h', 'f i'], dtype='<U3'),
 array(['j m p', 'k n q', 'l o r'], dtype='<U5')]

Первый массив - 1d, поэтому для согласованности требуется atleast_2d. Чаще всего это просто повторное применение строки join.

2 голосов
/ 16 февраля 2020

Попробуйте:

res=list(map(lambda x: list(map(' '.join, zip(*x))) if isinstance(x[0], list) else x, data))

Выходы:

[['a', 'b', 'c'], ['d g', 'e h', 'f i'], ['j m p', 'k n q', 'l o r']]
1 голос
/ 17 февраля 2020

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

out = [[' '.join(tup) for tup in zip(*arr.astype(str))] if arr.ndim > 1 else arr.tolist() 
               for arr in data]

Out[89]: [['a', 'b', 'c'], ['d g', 'e h', 'f i'], ['j m p', 'k n q', 'l o r']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...