Как правильно объединить строковые элементы во 2-й строке в numpy? - PullRequest
0 голосов
/ 16 июня 2019

В приведенном ниже коде я ожидаю, что arr2 вернет тот же список строк, что и lst2, но это не так. Почему lst2 и arr2 различны? Есть ли какой-нибудь NumPythonic способ заставить arr2 возвращать тот же список строк, что и lst2?

код:

import numpy as np

lst = [['MI', '', 'P'], 
       ['B', 'N', 'SUFS'],
       ['KOS', 'XJRXA', 'JJHW'],
       ['ARI', 'TPKI', ''],
       ['VR', 'EYR', '']]

arr = np.array(lst)

arr2 = np.apply_along_axis(lambda x: "".join(x), 1, arr)
lst2 = list(map(lambda x: "".join(x), lst))

print('lst:', lst)
print('arr:', arr.tolist())
print('lst2:', lst2)
print('arr2:', arr2.tolist())

выход:

lst: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
arr: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
lst2: ['MIP', 'BNSUFS', 'KOSXJRXAJJHW', 'ARITPKI', 'VREYR']
arr2: ['MIP', 'BNS', 'KOS', 'ARI', 'VRE']

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Спасибо. Я нашел ответ от https://github.com/numpy/numpy/issues/8352#issuecomment-488133970 .

import numpy as np

lst = [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
arr = np.array(lst)

arr2 = np.apply_along_axis(lambda x: np.asarray("".join(x), dtype=object), 1, arr)
# https://github.com/numpy/numpy/issues/8352#issuecomment-488133970
lst2 = list(map(lambda x: "".join(x), lst))

print('lst:', lst)
print('arr:', arr.tolist())
print('lst2:', lst2)
print('arr2:', arr2.tolist())
1 голос
/ 16 июня 2019

Панды сделают это легко:

pd.DataFrame(arr).sum(axis=1)

Причина, по которой np.apply_along_axis() доставляет вам неприятности, заключается в том, что он выводит длину строк в результате из первого ряда. Так как в первом ряду вы получите MIP, все строки будут содержать 3 символа, а это не то, что вам нужно.

Есть отчет об ошибке NumPy для apply_along_axis() с дополнительной информацией: https://github.com/numpy/numpy/issues/8352

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