Python-luettelotyyppisen kaksiulotteisen matriisin rivien ja sarakkeiden vaihto

liiketoiminta

Pythonin tavallinen listatyyppi voi esittää kaksiulotteista joukkoa listojen listana.

Tässä osassa kerrotaan, miten tämän kaksiulotteisen matriisin rivejä ja sarakkeita vaihdetaan.

    1. Muunna NumPy-massaksi
    2. .TTransponoi tämän kanssa.
    1. pandas.DataFrameMuunna tähän
    2. .TTransponoi tämän kanssa.
  • Transponointi sisäänrakennetulla funktiolla zip()

On helpompaa käyttää NumPy- tai pandas-ohjelmia, mutta jos et halua tuoda NumPy- tai pandas-ohjelmia vain transponointia varten, voit käyttää transponointiin zip()-funktiota.

Alkuperäinen kaksiulotteinen joukko määritellään seuraavasti

import numpy as np
import pandas as pd

l_2d = [[0, 1, 2], [3, 4, 5]]

Muunnetaan NumPy-massaksi ndarray ja transponoidaan .T:llä.

Muodostaa NumPy-massan ndarray alkuperäisestä kaksiulotteisesta massasta ja saa transponoidun objektin .T-attribuutilla.

Jos haluat lopussa Python-luettelotyyppisen objektin, muunna se edelleen luetteloksi metodilla tolist().

arr_t = np.array(l_2d).T

print(arr_t)
print(type(arr_t))
# [[0 3]
#  [1 4]
#  [2 5]]
# <class 'numpy.ndarray'>

l_2d_t = np.array(l_2d).T.tolist()

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

.T-attribuutin lisäksi voidaan käyttää myös ndarray-metodia transpose() ja funktiota numpy.transpose().

Muunnettu pandas.DataFrame-muotoon ja transponoitu .T:llä.

Luodaan pandas.DataFrame alkuperäisestä kaksiulotteisesta matriisista ja saadaan transponoitu objekti .T-attribuutilla.

Jos haluat lopuksi Python-luettelotyyppisen objektin, hae numpy.ndarray-olio values-attribuutilla ja muunna se sitten luetteloksi tolist()-metodilla.

df_t = pd.DataFrame(l_2d).T

print(df_t)
print(type(df_t))
#    0  1
# 0  0  3
# 1  1  4
# 2  2  5
# <class 'pandas.core.frame.DataFrame'>

l_2d_t = pd.DataFrame(l_2d).T.values.tolist()

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

Transponointi sisäänrakennetulla funktiolla zip()

Transponoi kaksiulotteisen matriisin käyttämällä sisäänrakennettua funktiota zip().

zip() on funktio, joka palauttaa iteraattorin, joka tiivistää useiden iteraattorien (listojen, tuplien jne.) elementit. Sitä käytetään esimerkiksi silloin, kun useita listoja ajetaan for-silmukassa.

Lisäksi funktio käyttää mekanismia, jonka avulla luettelo voidaan laajentaa ja siirtää, jos funktion argumentti on merkitty tähdellä.

Siirrot voidaan tehdä seuraavasti.

l_2d_t_tuple = list(zip(*l_2d))

print(l_2d_t_tuple)
print(type(l_2d_t_tuple))
# [(0, 3), (1, 4), (2, 5)]
# <class 'list'>

print(l_2d_t_tuple[0])
print(type(l_2d_t_tuple[0]))
# (0, 3)
# <class 'tuple'>

Sellaisenaan elementit ovat tupleja. Jos siis haluat tehdä siitä listan, käytä list()-ohjelmaa, joka muuntaa tuplen listaksi listan ymmärtämisen merkintätavalla.

l_2d_t = [list(x) for x in zip(*l_2d)]

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

print(l_2d_t[0])
print(type(l_2d_t[0]))
# [0, 3]
# <class 'list'>

Seuraavassa on prosessin vaiheittainen erittely.

Luettelon elementit laajennetaan tähdellä, laajennetut elementit ryhmitellään yhteen zip()-funktiolla, minkä jälkeen tuple muunnetaan listaksi listan ymmärtämisen merkintätavalla.

print(*l_2d)
# [0, 1, 2] [3, 4, 5]

print(list(zip([0, 1, 2], [3, 4, 5])))
# [(0, 3), (1, 4), (2, 5)]

print([list(x) for x in [(0, 3), (1, 4), (2, 5)]])
# [[0, 3], [1, 4], [2, 5]]
Copied title and URL