Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Listat ja NumPy-taulukot | Tietorakenteiden Tehokas Käyttö
Optimointitekniikat Pythonissa

bookListat ja NumPy-taulukot

Oikean tietorakenteen valinta voi vaikuttaa merkittävästi sekä suoritusnopeuteen että muistin käyttöön. Tarkastellaan ensin listoja ja verrataan niitä NumPy-taulukoihin, jotta ymmärrämme, milloin ja miten näitä tietorakenteita kannattaa käyttää tehokkaasti.

Lista

list on yksi yleisimmin käytetyistä tietotyypeistä. Se toimii dynaamisena taulukkona, eli sen koko voi kasvaa tai pienentyä tarpeen mukaan. Listat ovat monipuolisia ja tarjoavat tehokkaan pääsyn ja muokkauksen mihin tahansa indeksiin. Kuitenkin toiminnot, kuten alkioiden lisääminen tai poistaminen sekä jäsenyyden tarkistaminen, voivat hidastua suurilla listoilla. Poikkeuksena on lisäys tai poisto listan lopusta, joka pysyy tehokkaana listan koosta riippumatta.

Listojen käyttö on hyvä valinta seuraavissa tilanteissa:

  • Tarvitset järjestettyä dataa;
  • Pääset usein käsiksi alkioihin tai muokkaat niitä indeksin perusteella;
  • Sinun täytyy tallentaa eri tietotyyppejä (esim. kokonaislukuja, merkkijonoja tai omia olioita);
  • Et tarvitse nopeaa jäsenyyden tarkistusta tai nopeaa lisäämistä/poistamista listan keskeltä.
123456789101112131415
my_list = [10, 20, 30] # Access an element by index print(my_list[1]) # Modify an element at a specific index my_list[1] = 50 print(my_list) # Insert an element at the end of the list my_list.append(40) print(my_list) # Remove an element from the end of the list my_list.pop() print(my_list)
copy

NumPy-taulukko

Vaikka listat ovat monipuolisia, ne eivät ole tehokkaimpia suurten numeeristen operaatioiden käsittelyyn. Tässä kohtaa NumPy-taulukot ovat hyödyllisiä.

NumPy-taulukot on toteutettu C-kielellä, mikä tekee niistä huomattavasti nopeampia kuin listat numeerisissa operaatioissa. Keskeinen tekijä on vektorointi, jonka avulla operaatioita voidaan suorittaa koko taulukolle kerralla ilman eksplisiittisiä silmukoita. Tämä johtaa merkittäviin suorituskykyparannuksiin erityisesti suurten tietomassojen kanssa.

Tarkastellaan esimerkkiä, jossa jokainen alkio korotetaan toiseen potenssiin listassa (list comprehension -rakenteen sisällä olevan for-silmukan avulla) ja NumPy-taulukossa (vektoroinnin avulla):

1234567891011121314151617181920
import numpy as np import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator my_list = list(range(1, 100001)) arr = np.array(my_list) @timeit_decorator(number=100) def square_list(numbers_list): return [x ** 2 for x in numbers_list] @timeit_decorator(number=100) def square_array(numbers_array): return numbers_array ** 2 sqaures_list = square_list(my_list) squares_array = square_array(arr) if np.array_equal(squares_array, sqaures_list): print('The array is equal to the list')
copy

Kuten huomaat, NumPy-taulukoiden suorituskykyetu on varsin selvä.

Kun käsitellään numeerista dataa, NumPy-taulukot tarjoavat muistiedun listoihin verrattuna. Ne tallentavat varsinaisen datan yhtenäisiin muistilohkoihin, mikä tekee niistä tehokkaampia erityisesti suurten tietomäärien kanssa. Koska NumPy-taulukot ovat homogeenisia (sama tietotyyppi), ne välttävät viite-olioiden aiheuttaman ylikuorman.

Sen sijaan listat ovat heterogeenisia ja tallentavat viitteitä olioihin yhtenäisessä muistissa, mutta varsinaiset oliot sijaitsevat muualla. Tämä joustavuus aiheuttaa lisämuistikuormaa numeerisen datan käsittelyssä.

Yhteenvetona seuraava taulukko vertailee listoja ja NumPy-taulukoita:

1. Kehität ohjelmaa, jolla hallitaan joukkoa Sensor-olioita (oma luokka), joista jokaisella on timestamp (merkkijono) ja reading (liukuluku). Aineisto kasvaa ajan myötä, ja yksittäisten sensorilukemien päivityksiä tehdään usein. Mikä tietorakenne olisi paras valinta?

2. Työskentelet suuren numeerisen aineiston kanssa koneoppimisprojektissa. Mikä tietorakenne tarjoaa tehokkaimman suorituskyvyn tähän tehtävään?

3. Analysoit pörssidataa, joka koostuu numeerisista arvoista (hinnoista) ajan suhteen. Sinun täytyy suorittaa nopeita laskutoimituksia, kuten keskihinnan laskeminen ja matemaattisten muunnosten tekeminen aineistolle. Minkä tietorakenteen valitsisit?

question mark

Kehität ohjelmaa, jolla hallitaan joukkoa Sensor-olioita (oma luokka), joista jokaisella on timestamp (merkkijono) ja reading (liukuluku). Aineisto kasvaa ajan myötä, ja yksittäisten sensorilukemien päivityksiä tehdään usein. Mikä tietorakenne olisi paras valinta?

Select the correct answer

question mark

Työskentelet suuren numeerisen aineiston kanssa koneoppimisprojektissa. Mikä tietorakenne tarjoaa tehokkaimman suorituskyvyn tähän tehtävään?

Select the correct answer

question mark

Analysoit pörssidataa, joka koostuu numeerisista arvoista (hinnoista) ajan suhteen. Sinun täytyy suorittaa nopeita laskutoimituksia, kuten keskihinnan laskeminen ja matemaattisten muunnosten tekeminen aineistolle. Minkä tietorakenteen valitsisit?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 7.69

bookListat ja NumPy-taulukot

Pyyhkäise näyttääksesi valikon

Oikean tietorakenteen valinta voi vaikuttaa merkittävästi sekä suoritusnopeuteen että muistin käyttöön. Tarkastellaan ensin listoja ja verrataan niitä NumPy-taulukoihin, jotta ymmärrämme, milloin ja miten näitä tietorakenteita kannattaa käyttää tehokkaasti.

Lista

list on yksi yleisimmin käytetyistä tietotyypeistä. Se toimii dynaamisena taulukkona, eli sen koko voi kasvaa tai pienentyä tarpeen mukaan. Listat ovat monipuolisia ja tarjoavat tehokkaan pääsyn ja muokkauksen mihin tahansa indeksiin. Kuitenkin toiminnot, kuten alkioiden lisääminen tai poistaminen sekä jäsenyyden tarkistaminen, voivat hidastua suurilla listoilla. Poikkeuksena on lisäys tai poisto listan lopusta, joka pysyy tehokkaana listan koosta riippumatta.

Listojen käyttö on hyvä valinta seuraavissa tilanteissa:

  • Tarvitset järjestettyä dataa;
  • Pääset usein käsiksi alkioihin tai muokkaat niitä indeksin perusteella;
  • Sinun täytyy tallentaa eri tietotyyppejä (esim. kokonaislukuja, merkkijonoja tai omia olioita);
  • Et tarvitse nopeaa jäsenyyden tarkistusta tai nopeaa lisäämistä/poistamista listan keskeltä.
123456789101112131415
my_list = [10, 20, 30] # Access an element by index print(my_list[1]) # Modify an element at a specific index my_list[1] = 50 print(my_list) # Insert an element at the end of the list my_list.append(40) print(my_list) # Remove an element from the end of the list my_list.pop() print(my_list)
copy

NumPy-taulukko

Vaikka listat ovat monipuolisia, ne eivät ole tehokkaimpia suurten numeeristen operaatioiden käsittelyyn. Tässä kohtaa NumPy-taulukot ovat hyödyllisiä.

NumPy-taulukot on toteutettu C-kielellä, mikä tekee niistä huomattavasti nopeampia kuin listat numeerisissa operaatioissa. Keskeinen tekijä on vektorointi, jonka avulla operaatioita voidaan suorittaa koko taulukolle kerralla ilman eksplisiittisiä silmukoita. Tämä johtaa merkittäviin suorituskykyparannuksiin erityisesti suurten tietomassojen kanssa.

Tarkastellaan esimerkkiä, jossa jokainen alkio korotetaan toiseen potenssiin listassa (list comprehension -rakenteen sisällä olevan for-silmukan avulla) ja NumPy-taulukossa (vektoroinnin avulla):

1234567891011121314151617181920
import numpy as np import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator my_list = list(range(1, 100001)) arr = np.array(my_list) @timeit_decorator(number=100) def square_list(numbers_list): return [x ** 2 for x in numbers_list] @timeit_decorator(number=100) def square_array(numbers_array): return numbers_array ** 2 sqaures_list = square_list(my_list) squares_array = square_array(arr) if np.array_equal(squares_array, sqaures_list): print('The array is equal to the list')
copy

Kuten huomaat, NumPy-taulukoiden suorituskykyetu on varsin selvä.

Kun käsitellään numeerista dataa, NumPy-taulukot tarjoavat muistiedun listoihin verrattuna. Ne tallentavat varsinaisen datan yhtenäisiin muistilohkoihin, mikä tekee niistä tehokkaampia erityisesti suurten tietomäärien kanssa. Koska NumPy-taulukot ovat homogeenisia (sama tietotyyppi), ne välttävät viite-olioiden aiheuttaman ylikuorman.

Sen sijaan listat ovat heterogeenisia ja tallentavat viitteitä olioihin yhtenäisessä muistissa, mutta varsinaiset oliot sijaitsevat muualla. Tämä joustavuus aiheuttaa lisämuistikuormaa numeerisen datan käsittelyssä.

Yhteenvetona seuraava taulukko vertailee listoja ja NumPy-taulukoita:

1. Kehität ohjelmaa, jolla hallitaan joukkoa Sensor-olioita (oma luokka), joista jokaisella on timestamp (merkkijono) ja reading (liukuluku). Aineisto kasvaa ajan myötä, ja yksittäisten sensorilukemien päivityksiä tehdään usein. Mikä tietorakenne olisi paras valinta?

2. Työskentelet suuren numeerisen aineiston kanssa koneoppimisprojektissa. Mikä tietorakenne tarjoaa tehokkaimman suorituskyvyn tähän tehtävään?

3. Analysoit pörssidataa, joka koostuu numeerisista arvoista (hinnoista) ajan suhteen. Sinun täytyy suorittaa nopeita laskutoimituksia, kuten keskihinnan laskeminen ja matemaattisten muunnosten tekeminen aineistolle. Minkä tietorakenteen valitsisit?

question mark

Kehität ohjelmaa, jolla hallitaan joukkoa Sensor-olioita (oma luokka), joista jokaisella on timestamp (merkkijono) ja reading (liukuluku). Aineisto kasvaa ajan myötä, ja yksittäisten sensorilukemien päivityksiä tehdään usein. Mikä tietorakenne olisi paras valinta?

Select the correct answer

question mark

Työskentelet suuren numeerisen aineiston kanssa koneoppimisprojektissa. Mikä tietorakenne tarjoaa tehokkaimman suorituskyvyn tähän tehtävään?

Select the correct answer

question mark

Analysoit pörssidataa, joka koostuu numeerisista arvoista (hinnoista) ajan suhteen. Sinun täytyy suorittaa nopeita laskutoimituksia, kuten keskihinnan laskeminen ja matemaattisten muunnosten tekeminen aineistolle. Minkä tietorakenteen valitsisit?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 1
some-alt