нужно захватить весь первый элемент (массив) в многомерном списке массивов python3 - PullRequest
0 голосов
/ 01 марта 2019

Извиняюсь, если об этом уже спрашивали, но я довольно долго искал и не мог найти совершенно правильное решениеЯ новичок в python, но постараюсь быть максимально понятным.Короче говоря, у меня есть список массивов в следующем формате, полученный в результате присоединения к многопроцессорному пулу:

array = [[[1,2,3], 5, 47, 2515],..... [[4,5,6], 3, 35, 2096]]]

, и я хочу получить все значения из первого элемента массива, чтобы сформировать новый массив в следующемform:

print(new_array)
[1,2,3,4,5,6]

В моем коде я пытался получить первое значение с помощью этой функции:

new_array = array[0][0]

, но это возвращает только первое значение как таковое:

print(new_array)
[1,2,3]

Я также попробовал np.take после преобразования массива в массив np:

array = np.array(array)

new_array = np.take(results,0)

print(new_array)

[1,2,3]

Я попробовал ряд функций np (сцепить, взять и т. Д.), Чтобы попытаться повторить этопо списку, но верните следующую ошибку (предположительно, из-за изменения размера массива):

ValueError: autodetected range of [[], [1445.0, 1445.0, -248.0, 638.0, -108.0, 649.0]] is not finite

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы также можете использовать функцию цепочки () itertools для выравнивания извлечения первого subArray в каждом элементе списка:

from itertools import chain
result = list(chain(*[sub[0] for sub in array]))
0 голосов
/ 01 марта 2019

Вы можете достичь этого без всяких сомнений, используя уменьшение:

from functools import reduce
l = [[[1,2,3], 5, 47, 2515], [[4,5,6], 3, 35, 2096]]
res = reduce(lambda a, b: [*a, *b], [x[0] for x in l])

Вывод

[1, 2, 3, 4, 5, 6]

Возможно, стоит упомянуть, что [*a, *b] - это способ объединения списков в python, дляпример:

[*[1, 2, 3], *[4, 5, 6]]  # [1, 2, 3, 4, 5, 6]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...