Объединить два пустых массива в список списков кортежей - PullRequest
0 голосов
/ 01 марта 2019

Я не смог понять это.Спасибо за любую помощь:

Имею:

>>> x = np.array([[1,2],[5,6]])
>>> x
array([[1, 2],
       [5, 6]])
>>> y = np.array([[3,4],[7,8]])
>>> y
array([[3, 4],
       [7, 8]])

Хочу:

>>> z = [[(1,2),(3,4)],[(5,6),(7,8)]]
>>> z
[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

Ответы [ 6 ]

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

Это забавная проблема.Вот то, что я придумал:

print([list(map(tuple, i)) for i in zip(x, y)])
# [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

По сути, сжатие x и y дает вам:

[(array([1, 2]), array([3, 4])), (array([5, 6]), array([7, 8])]

, и затем вы сначала конвертируете каждый элемент в список, а затем в кортеж

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

Для чего оно стоит, вот простейшее и наиболее эффективное (но, вероятно, наименее обобщенное) решение:

result = [[(x[0,0], x[0,1]), (y[0,0], y[0,1])],
         [(x[1,0], x[1,1]), (y[1,0], y[1,1])]]

Вывод:

[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

По общему признаниюЭто не обобщает, но вопрос в том, в каком направлении требуется обобщение?Более длинный внешний размер?Более длинный внутренний размер?Вопрос не требует какого-либо обобщения.

Исходя из четко сформулированного требования, это решение, конечно, можно изменить, сделав его обобщенным настолько, насколько необходимо .

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

IIUC

z=np.array([x,y])
[list(map(tuple,z[:,x]))for x in range(len(x))]
Out[223]: [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
0 голосов
/ 01 марта 2019

Попробуйте это:

x_z = map(tuple,x)
y_z = map(tuple,y)
[list(i) for i in zip(x_z, y_z)]

Вывод:

[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
0 голосов
/ 01 марта 2019
x = list([[1,2],[5,6]])
y = list([[3,4],[7,8]])
x
[[1, 2], [5, 6]]
y
[[3, 4], [7, 8]]
z=list(zip(x,y))
z
[([1, 2], [3, 4]), ([5, 6], [7, 8])]
0 голосов
/ 01 марта 2019

Если вы хотите просмотреть строки каждой матрицы, вы можете сделать это:

for (row1, row2) in zip(x,y):
    yield [tuple(row1), tuple(row2)]
       #  [ (1,2)     ,  (3,4)     ]

Это даст вам генератор (если вы заключите его в функцию), но вам нужен список,Поэтому вместо этого оберните это в понимании:

[ [tuple(row1),tuple(row2)] for (row1, row2) in zip(x,y) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...