Сделайте векторы членов из кортежей в Python - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть список кортежей / списков. Пример:

a = [[1,2], [2,4], [3,6]]

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

или в одном [[1,2,3],[2,4,6]] Каждое решение, использующее numy или списки по умолчанию, будет оценено.

Я не нашел способа сделать это питонически или эффективно, используя любую другую функцию, кроме циклов:

def vectorise_pairs(pairs):
    return [[p[0] for p in pairs],
            [p[1] for p in pairs]
           ]

Есть ли лучший способ сделать это?

Ответы [ 4 ]

0 голосов
/ 06 ноября 2018

Напрямую из официальной документации (https://docs.python.org/2/tutorial/datastructures.html#nested-list-comprehensions):

a = [[1,2], [2,4], [3,6]]

[[row[i] for row in a] for i in range(len(a[0]))]
#=> [[1, 2, 3], [2, 4, 6]]
0 голосов
/ 06 ноября 2018

Поскольку вы пометили NumPy, my_array.T транспонирует my_array.

>>> import numpy as np
>>> a = [[1,2], [2,4], [3,6]]
>>> np.array(a).T
array([[1, 2, 3],
       [2, 4, 6]])

Кроме того, вы можете использовать np.transpose (который даже принимает списки).

>>> np.transpose(a)
array([[1, 2, 3],
       [2, 4, 6]])
0 голосов
/ 06 ноября 2018

Решение Алекса хорошо работает как общая транспонирование любого итерируемого Python. Если у вас есть причины специально использовать Numpy, вы также можете использовать следующее:

import numpy as np
a = np.array([[1,2], [2,4], [3,6]])
first, second = a.T
# OR,
first = a[:, 0]
second = a[:, 1]  # etc.
0 голосов
/ 06 ноября 2018
first, second = zip(*a)
print(first, second)

выходы

(1, 2, 3) (2, 4, 6)

Если вам нужны списки или массивы, вы можете преобразовать их:

first, second = list(first), list(second)
first, second = np.array(first), np.array(second)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...