Indexering med Heltalsmatriser
Förutom grundläggande indexering, där ett heltal används för ett enskilt index, tillåter NumPy även att en hel 1D-array av heltal (en lista av heltal är också möjlig) används för indexering.
Indexering med heltalsarrayer i 1D-arrayer
Varje element i heltalsarrayen som används för indexering behandlas som ett index, så till exempel hämtar array[[0, 1, 3]] elementen vid index 0, 1 och 3 i form av en 1D-array, förutsatt att array själv är en 1D-array. Det går även att använda NumPy-arrayer för indexering, men det gör koden mer omständlig.
12345678import numpy as np array = np.array([23, 41, 7, 80, 3]) # Retrieving elements at indices 0, 1 and 3 print(array[[0, 1, 3]]) # Retrieving elements at indices 1, -1 and 2 in this order print(array[[1, -1, 2]]) # IndexError is thrown since index 5 is out of bounds print(array[[2, 5]])
Heltalsindexering i 1D-arrayer
När det gäller 2D- och högre-dimensionella arrayer fungerar heltalsindexering på samma sätt som i 1D-arrayer längs varje axel. Om vi använder endast en heltalsarray för indexering, indexerar vi endast längs en axel (axel 0). Om vi använder två arrayer separerade med ett kommatecken, indexerar vi längs båda axlarna (axel 0 och axel 1).
Indexering endast längs axel 0 med en array av heltal returnerar en 2D-array. När vi hämtar element via sådan indexering grupperas de i en ny array. Denna nya array består av 1D-arrayer, och gruppering ökar dimensionaliteten med ett, vilket resulterar i en 2D-array.
Indexering längs axel 0 och axel 1 med två arrayer av heltal returnerar en 1D-array.
Alla heltalsarrayer som används för varje axel måste ha samma form.
123456789101112131415import numpy as np array_2d = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) # Retrieving first and the third row print(array_2d[[0, 2]]) # Retrieving the main diagonal elements print(array_2d[[0, 1, 2], [0, 1, 2]]) # Retrieving the first and third element of the second row print(array_2d[1, [0, 2]]) # IndexError is thrown, since index 3 along axis 0 is out of bounds print(array_2d[[0, 3], [0, 1]])
Som du kan se kan vi också kombinera grundläggande heltalsindexering och heltalsvektorindexering.
Återigen, om minst ett av indexen är utanför gränserna kastas ett IndexError.
När det gäller tillämpningar är sådan indexering användbar när du behöver välja specifika element som inte ligger intill varandra eller inte följer en regelbunden ordning. Till skillnad från slicing, som arbetar med kontinuerliga intervall, låter denna metod dig välja exakt vilka element som ska hämtas. Det är användbart när du vill extrahera utspridda data eller omorganisera värden i en array.
1. Du analyserar månatliga försäljningsdata (i tusental) för fem produkter. Vad blir utmatningen av koden?
2. Arrayen temperatures representerar veckotemperaturerna (i °C) för tre städer under måndag, tisdag och onsdag. Välj det korrekta alternativet för att hämta temperaturerna för Berlin på måndag och tisdag samt Madrid på tisdag.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 3.7
Indexering med Heltalsmatriser
Svep för att visa menyn
Förutom grundläggande indexering, där ett heltal används för ett enskilt index, tillåter NumPy även att en hel 1D-array av heltal (en lista av heltal är också möjlig) används för indexering.
Indexering med heltalsarrayer i 1D-arrayer
Varje element i heltalsarrayen som används för indexering behandlas som ett index, så till exempel hämtar array[[0, 1, 3]] elementen vid index 0, 1 och 3 i form av en 1D-array, förutsatt att array själv är en 1D-array. Det går även att använda NumPy-arrayer för indexering, men det gör koden mer omständlig.
12345678import numpy as np array = np.array([23, 41, 7, 80, 3]) # Retrieving elements at indices 0, 1 and 3 print(array[[0, 1, 3]]) # Retrieving elements at indices 1, -1 and 2 in this order print(array[[1, -1, 2]]) # IndexError is thrown since index 5 is out of bounds print(array[[2, 5]])
Heltalsindexering i 1D-arrayer
När det gäller 2D- och högre-dimensionella arrayer fungerar heltalsindexering på samma sätt som i 1D-arrayer längs varje axel. Om vi använder endast en heltalsarray för indexering, indexerar vi endast längs en axel (axel 0). Om vi använder två arrayer separerade med ett kommatecken, indexerar vi längs båda axlarna (axel 0 och axel 1).
Indexering endast längs axel 0 med en array av heltal returnerar en 2D-array. När vi hämtar element via sådan indexering grupperas de i en ny array. Denna nya array består av 1D-arrayer, och gruppering ökar dimensionaliteten med ett, vilket resulterar i en 2D-array.
Indexering längs axel 0 och axel 1 med två arrayer av heltal returnerar en 1D-array.
Alla heltalsarrayer som används för varje axel måste ha samma form.
123456789101112131415import numpy as np array_2d = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) # Retrieving first and the third row print(array_2d[[0, 2]]) # Retrieving the main diagonal elements print(array_2d[[0, 1, 2], [0, 1, 2]]) # Retrieving the first and third element of the second row print(array_2d[1, [0, 2]]) # IndexError is thrown, since index 3 along axis 0 is out of bounds print(array_2d[[0, 3], [0, 1]])
Som du kan se kan vi också kombinera grundläggande heltalsindexering och heltalsvektorindexering.
Återigen, om minst ett av indexen är utanför gränserna kastas ett IndexError.
När det gäller tillämpningar är sådan indexering användbar när du behöver välja specifika element som inte ligger intill varandra eller inte följer en regelbunden ordning. Till skillnad från slicing, som arbetar med kontinuerliga intervall, låter denna metod dig välja exakt vilka element som ska hämtas. Det är användbart när du vill extrahera utspridda data eller omorganisera värden i en array.
1. Du analyserar månatliga försäljningsdata (i tusental) för fem produkter. Vad blir utmatningen av koden?
2. Arrayen temperatures representerar veckotemperaturerna (i °C) för tre städer under måndag, tisdag och onsdag. Välj det korrekta alternativet för att hämta temperaturerna för Berlin på måndag och tisdag samt Madrid på tisdag.
Tack för dina kommentarer!