Python hervormt lijst naar ndim-array

Hallo, ik heb een platte lijst met een lengte van 2800, deze bevat 100 resultaten voor elk van de 28 variabelen: Hieronder ziet u een voorbeeld van 4 resultaten voor 2 variabelen

[0,
 0,
 1,
 1,
 2,
 2,
 3,
 3]

Ik wil de lijst omvormen tot een array (2,4) zodat de resultaten voor elke variabele in één enkel element staan.

[[0,1,2,3],
 [0,1,2,3]]

Antwoord 1, autoriteit 100%

Je kunt bedenken dat de nieuwe vorm rij voor rij wordt gevuld (laatste dimensie varieert het snelst) van de afgeplatte originele lijst/array.

Een eenvoudige oplossing is om de lijst in een (100, 28) array te vormen en deze vervolgens te transponeren:

x = np.reshape(list_data, (100, 28)).T

Update met betrekking tot het bijgewerkte voorbeeld:

np.reshape([0, 0, 1, 1, 2, 2, 3, 3], (4, 2)).T
# array([[0, 1, 2, 3],
#        [0, 1, 2, 3]])
np.reshape([0, 0, 1, 1, 2, 2, 3, 3], (2, 4))
# array([[0, 0, 1, 1],
#        [2, 2, 3, 3]])

Antwoord 2, autoriteit 3%

Stap voor stap:

# import numpy library
import numpy as np
# create list
my_list = [0,0,1,1,2,2,3,3]
# convert list to numpy array
np_array=np.asarray(my_list)
# reshape array into 4 rows x 2 columns, and transpose the result
reshaped_array = np_array.reshape(4, 2).T 
#check the result
reshaped_array
array([[0, 1, 2, 3],
       [0, 1, 2, 3]])

Antwoord 3, autoriteit 3%

De bovenstaande antwoorden zijn goed. Een case toevoegen die ik heb gebruikt.
Alleen als je numpy niet wilt gebruiken en het als lijst wilt behouden zonder de inhoud te wijzigen.

Je kunt een kleine lus maken en de afmeting wijzigen van 1xN in Nx1.

   tmp=[]
    for b in bus:
        tmp.append([b])
    bus=tmp

Het is misschien niet efficiënt in het geval van zeer grote aantallen. Maar het werkt voor een kleine reeks getallen.
Bedankt


Antwoord 4

U kunt de interpretatievolgorde van de assen specificeren met behulp van de parameter order:

np.reshape(arr, (2, -1), order='F')

Other episodes