Array van arrays (Python/NumPy)

Ik gebruik Python/NumPy en ik heb twee arrays zoals de volgende:

array1 = [1 2 3]
array2 = [4 5 6]

En ik wil graag een nieuwe array maken:

array3 = [[1 2 3], [4 5 6]]

en voeg er items aan toe. Dus bijvoorbeeld als de nieuwe items die moeten worden toegevoegd zijn:

array4 = [7 8 9]
array5 = [10 11 12]

Dan zou array3 nu een array zijn met twee rijen en twee kolommen zoals hieronder getoond:

array3= [[1 2 3], [4 5 6]
         [7 8 9], [10 11 12]]

Het lijkt erop dat ik problemen heb omdat de elementen van mijn arrays niet worden gescheiden door komma’s.


Antwoord 1, autoriteit 100%

Het lijkt vreemd dat je arrays zou schrijven zonder komma’s (is dat een MATLAB-syntaxis?)

Heb je geprobeerd om NumPy’s documentatie over multidimensionale arrays door te nemen?

Het lijkt erop dat NumPy een “Python-achtige” toevoegmethode om items toe te voegen aan een NumPy n-dimensionale array:

>>> p = np.array([[1,2],[3,4]])
>>> p = np.append(p, [[5,6]], 0)
>>> p = np.append(p, [[7],[8],[9]],1)
>>> p
array([[1, 2, 7], [3, 4, 8], [5, 6, 9]])

Het is ook al beantwoord

Van de documentatie voor MATLAB-gebruikers:

Je zou een matrixconstructor kunnen gebruiken die een string in de vorm van een matrix MATLAB letterlijk neemt:

mat("1 2 3; 4 5 6")
or
matrix("[1 2 3; 4 5 6]")

Probeer het eens en vertel me hoe het gaat.


Antwoord 2, autoriteit 40%

U zult problemen ondervinden bij het maken van lijsten zonder komma’s. Het zou niet al te moeilijk moeten zijn om uw gegevens te transformeren zodat ze komma’s als scheidingsteken gebruiken.

Als je daar komma’s hebt, is het een relatief eenvoudige bewerking voor het maken van een lijst:

array1 = [1,2,3]
array2 = [4,5,6]
array3 = [array1, array2]
array4 = [7,8,9]
array5 = [10,11,12]
array3 = [array3, [array4, array5]]

Bij het testen krijgen we:

print(array3)
[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]

En als we testen met indexering, werkt het correct als we de matrix lezen die bestaat uit 2 rijen en 2 kolommen:

array3[0][1]
[4, 5, 6]
array3[1][1]
[10, 11, 12]

Hopelijk helpt dat.


Antwoord 3, autoriteit 20%

Als het bestand alleen uit numerieke waarden bestaat, gescheiden door tabs, probeer dan de csv-bibliotheek:
http://docs.python.org/library/csv.html
(u kunt het scheidingsteken op ‘\t’ zetten)

Als je een tekstbestand hebt waarin elke regel een rij in een matrix vertegenwoordigt en gehele getallen heeft, gescheiden door spaties\tabs, omgeven door een ‘arrayname = […]’-syntaxis, moet je zoiets doen als:

p>

import re
f = open("your-filename", 'rb')
result_matrix = []
for line in f.readlines():
    match = re.match(r'\s*\w+\s+\=\s+\[(.*?)\]\s*', line)
    if match is None:
        pass # line syntax is wrong - ignore the line
    values_as_strings = match.group(1).split()
    result_matrix.append(map(int, values_as_strings))

Antwoord 4

a=np.array([[1,2,3],[4,5,6]])

a.tolist()

de hierboven genoemde tolist-methode retourneert de geneste Python-lijst

Other episodes