Измените 2D кортеж на 1D - PullRequest
       8

Измените 2D кортеж на 1D

0 голосов
/ 31 марта 2020

У меня есть кортеж (32 x 120):

пример (4x120)


[ [1, 2, 3, 4, .... , 118, 119, 120],
  [2, 3, 4, 5, .... , 119, 120, 121],
  [3, 4, 5, 6, .... , 120, 121, 122], 
  [4, 5, 6, 7, .... , 121, 122, 123] ] 

, и я хочу такой вектор:

[1,2,3,4, 2,3,4,5, 3,4,5,6, 4,5,6,7, ..... 118,119,120,121, 119,120,121,122, 120,121,122,123]

любой идея?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы можете использовать NumPy np.ravel для выравнивания массива.

Пример использования кортежа кортежей (работает и для списков):

import numpy as np
a = ((1,2,3), (2,3,4), (4,5,6))
np.ravel(a)

Дает массив где разворачивается путем добавления строк:

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

Это можно сделать в столбцах следующим образом:

np.ravel(a, order='F')
>>> array([1, 2, 4, 2, 3, 5, 3, 4, 6])

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

np.ravel(a).tolist()
>>> [1, 2, 3, 2, 3, 4, 4, 5, 6]
1 голос
/ 31 марта 2020

Быстрым и простым способом было бы сделать это в Numpy, поскольку вы можете просто перенести массив с помощью T и затем flatten() в 1D-массив.

import numpy as np
x = np.array([ [1, 2, 3, 4  118, 119, 120],
             [2, 3, 4, 5, 119, 120, 121],
             [3, 4, 5, 6, 120, 121, 122], 
             [4, 5, 6, 7, 121, 122, 123] ] )

print(x.T.flatten())

дает

array([  1,   2,   3,   4,   2,   3,   4,   5,   3,   4,   5,   6,   4,
         5,   6,   7, 118, 119, 120, 121, 119, 120, 121, 122, 120, 121,
       122, 123])

Если бы вы хотели, чтобы это был список, а не массив, это было бы x.T.flatten().tolist()

Для решения, отличного от Numpy, вы можете использовать это:

[inner for outer in zip(*x) for inner in outer]

, который возвращает тот же вывод, что и выше.

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