Ideja te naloge je, da jo rešite z eno samo preprosto vrstico v numpyju. Nobenega for ali while, nobenih izpeljanih seznamov ali česa podobnega!
Pravilno napisna funkcija bo dolga eno vrstico, ki bo krajša od vrstice
def srecne_drzave(teze, vrednosti, drzave, meja):
Tore: napišite funkcijo
srecne_drzave(teze, vrednosti, drzave, meja)
.
teze
vsebuje težo uvoženih banan,vrednosti
pove, koliko je posamezna država plačala za
te banane,drzave
pa so imena držav. Vse tri tabele so enake
dolžine in vsebujejo podatke v enakem vrstnem redu.Gre, očitno, za to, kar vračata prvi dve funkciji iz prejšnje domače naloge.
Funkcija vrne vrne tabelo z imeni držav, ki so za svoje banane
plačale manj od podane meje. Države morajo v tabeli nastopati v enakem
vrstnem redu kot v podani tabeli drzave
. Z drugimi
besedami, tabela, ki jo vrnete, mora biti takšna kot tabela
drzave
, vendar le s tistimi državami, ki so plačale manj
kot meja
.
Pomoč: s tabelo nizov lahko delamo enake stvari, kot smo jih na
predavanjih s tabelami števil - tudi tabelo držav lahko indeksiramo s
tabelami indeksov, s tabelo True
-jev in
False
-ov ipd.
Semle skopiram podatke iz testov, da lahko spodaj poganjam primere.
import numpy as np
= np.array([
teze 1068570000, 9342850, 612897, 18700200, 49379400, 56, 370860, 43500500, 10144900, 13835200, 43631, 560529, 744,
17534600, 244311, 1532300, 196011000, 11942800, 14537700, 126296000, 1109590000, 19241800, 351094000, 78485700,
200695000, 38, 36990300, 1043, 44463300, 2254140, 8458220, 4928940, 34353400, 665230000, 921, 4361420000,
6713560,
2801620, 25146700, 1383, 232316000, 16513200, 15257100, 87426100, 1262980, 984042, 3696, 5001, 2276820, 1834080,
3674190, 1389550, 18517700, 1405, 70, 214838000, 243406, 3811980, 209393, 663050000, 184010000, 37136, 2776060,
1023000000, 96376, 42021600, 73296100, 10801, 652604000, 11648, 175679000, 56456100, 3244410, 432232, 28058500,
5749150, 496208000, 189785000, 661390000, 306924000, 3990210, 2201580, 252888000, 721, 14383800, 24717400, 80,
1035, 77105800, 5007, 20, 6560710, 15098200, 1260, 1308900000, 4985, 16187800, 81313800, 207859000, 12153300,
27587000, 10744700, 620922, 120931000, 4078, 98410700, 40, 511178, 79888700, 10536100, 337907000, 623329, 54,
21303300, 2243, 6242780, 53954900, 39347600, 58980300, 954379, 45073400, 221254000, 11955600, 8986530, 201142,
152588000, 67857700, 2779200, 39630100, 4220, 72308600, 91093500, 505, 423, 682, 111907000, 8342420, 55854900,
1000, 7133440, 192466, 623, 41875700, 20, 564718000, 7, 49, 36951000, 97095, 67025]
)= np.array([
vrednosti 704414240.0, 5198640.0, 157250.0, 5112190.0, 36917880.0, 630.0, 8000.0, 15652370.0, 5257200.0, 9220620.0,
92800.0,
448430.0, 4370.0, 12969130.0, 49730.0, 382490.0, 132893720.0, 11756100.0, 4162040.0, 128338700.0, 850738690.0,
19999940.0, 114364670.0, 82133940.0, 95349460.0, 290.0, 8672850.0, 1770.0, 34411500.0, 235290.0, 11840420.0,
8420020.0, 30988300.0, 246818670.0, 6020.0, 2121188560.0, 1053330.0, 89600.0, 2210900.0, 1390.0, 89375730.0,
8342040.000000001, 14250450.0, 86454840.0, 1010400.0, 5040470.0, 2960.0, 34260.0, 1324970.0, 1448430.0,
1362790.0,
769760.0, 1500810.0, 310.0, 290.0, 154979800.0, 319310.0, 212700.0, 317670.0, 497390830.0, 180013280.0, 17550.0,
1794780.0, 762868730.0, 42760.0, 32244710.0, 34409890.0, 8550.0, 704455360.0, 52000.0, 47054850.0, 70982550.0,
306660.0, 75920.0, 12041100.0, 5823920.0, 354618660.0, 131940180.0, 392402000.0, 176103690.0,
4178640.0000000005,
331280.0, 202587630.0, 3080.0, 11359250.0, 910640.0, 190.0, 830.0, 67082000.0, 21350.0, 340.0, 3809010.0,
14232640.0, 1920.0, 946332640.0, 24940.0, 11224320.0, 61946980.0, 105558710.0, 339780.0, 16204030.0, 5069310.0,
55400.0, 100032790.0, 3260.0, 47176630.0, 120.0, 163550.0, 101210240.0, 5584560.0, 210354680.0, 405000.0, 10.0,
3255560.0, 4140.0, 7085300.0, 36155240.0, 17821430.0, 54699790.0, 744540.0, 24541610.0, 186693450.0, 1974190.0,
5114640.0, 158850.0, 102653740.0, 47623360.0, 1565850.0, 25061160.0, 3550.0, 57945390.0, 57052640.0, 400.0,
470.0,
12040.0, 16552220.000000002, 367340.0, 4715430.0, 160.0, 7980060.0, 803750.0, 1060.0, 30607910.0, 20.0,
427873090.0, 130.0, 240.0, 22456700.0, 111600.0, 32400.0]
)= np.array([
drzave 'Russian Federation', 'Botswana', 'Paraguay', 'Tunisia', 'Croatia', 'Cook Islands', 'Benin', 'Uruguay',
'Egypt, Arab Rep.', 'Bahrain', 'Greenland', 'Vietnam', 'French Polynesia', 'Albania', 'Lebanon', 'Malaysia',
'Czech Republic', 'Estonia', 'Trinidad and Tobago', 'Austria', 'Japan', 'Azerbaijan', 'Argentina', 'Norway',
'Turkey', 'Vanuatu', 'South Africa', 'Malawi', 'Belarus', 'Mauritania', 'Armenia', 'Luxembourg', 'Lithuania',
'China', 'New Caledonia', 'United States', 'Nigeria', 'Burkina Faso', 'Colombia', 'Fiji',
'Syrian Arab Republic',
'Senegal', 'Georgia', 'Denmark', 'Bermuda', 'Bahamas, The', 'Dominican Republic', 'Venezuela', 'Macao',
'Brunei',
'Barbados', 'Maldives', 'Mali', 'Pakistan', "Cote d'Ivoire", 'Ukraine', 'Andorra', 'Niger', 'Mexico', 'Italy',
'Sweden', 'St. Kitts and Nevis', 'Aruba', 'United Kingdom', 'Kenya', 'Bulgaria', 'Hong Kong, China', 'Panama',
'Belgium', 'Israel', 'Chile', 'Finland', 'Rwanda', 'Bhutan', 'Morocco', 'Iceland', 'Canada', 'Spain',
'Iran, Islamic Rep.', 'Saudi Arabia', 'Namibia', 'Guatemala', 'Poland', 'Ethiopia(excludes Eritrea)',
'Occ.Pal.Terr', 'Costa Rica', 'Comoros', 'Lao PDR', 'Hungary', 'Ghana', 'Gambia, The', 'Montenegro', 'Latvia',
'Bangladesh', 'Germany', 'Brazil', 'North Macedonia', 'New Zealand', 'Algeria', 'Nepal', 'Qatar', 'Oman',
'Uganda', 'Greece', 'Mozambique', 'Libya', 'Guyana', 'Zimbabwe', 'Switzerland', 'Moldova', 'Korea, Rep.',
'Antigua and Barbuda', 'Bolivia', 'Afghanistan', 'Gabon', 'Malta', 'Slovenia', 'Singapore', 'Slovak Republic',
'Lesotho', 'Kazakhstan', 'Netherlands', 'Thailand', 'Kyrgyz Republic', 'Zambia', 'Portugal', 'Romania',
'Indonesia', 'Jordan', 'Angola', 'Ireland', 'Kuwait', 'Micronesia, Fed. Sts.', 'St. Lucia', 'Seychelles',
'El Salvador', 'Nicaragua', 'Honduras', 'Burundi', 'Cyprus', 'Australia', 'Cape Verde',
'Serbia, FR(Serbia/Montenegro)', 'Palau', 'France', 'Other Asia, nes', 'Tonga', 'Bosnia and Herzegovina',
'Grenada', 'Sri Lanka']
)
Cene banan dobimo tako, da delimo vrednosti s težami.
/ teze vrednosti
array([ 0.65921207, 0.55642978, 0.2565684 , 0.27337622, 0.74763727,
11.25 , 0.02157148, 0.35982046, 0.51821112, 0.66646091,
2.1269281 , 0.80001213, 5.87365591, 0.73963079, 0.20355203,
0.24961822, 0.67799113, 0.98436715, 0.28629288, 1.01617391,
0.76671445, 1.03940068, 0.32573804, 1.04648286, 0.47509634,
7.63157895, 0.23446282, 1.6970278 , 0.77393041, 0.10438127,
1.39987137, 1.70828211, 0.90204463, 0.37102757, 6.53637351,
0.48635274, 0.15689589, 0.0319815 , 0.08792008, 1.00506146,
0.38471621, 0.50517404, 0.93402088, 0.9888905 , 0.80001267,
5.12221023, 0.8008658 , 6.85062987, 0.58193884, 0.78973109,
0.37090896, 0.55396351, 0.08104732, 0.22064057, 4.14285714,
0.72137983, 1.31184112, 0.05579777, 1.51709943, 0.75015584,
0.97827988, 0.47258725, 0.64652061, 0.74571723, 0.44367892,
0.76733656, 0.46946413, 0.79159337, 1.07945302, 4.46428571,
0.26784562, 1.25730523, 0.0945195 , 0.17564641, 0.42914268,
1.0130054 , 0.71465728, 0.69520868, 0.59329896, 0.5737697 ,
1.04722308, 0.15047375, 0.80109626, 4.27184466, 0.78972525,
0.03684206, 2.375 , 0.80193237, 0.8699994 , 4.26403036,
17. , 0.58057893, 0.94267131, 1.52380952, 0.72299843,
5.00300903, 0.69338144, 0.76182616, 0.50783805, 0.02795784,
0.5873792 , 0.47179633, 0.08922216, 0.82718898, 0.79941148,
0.47938517, 3. , 0.31994726, 1.26689056, 0.53004053,
0.62252241, 0.64973714, 0.18518519, 0.15281952, 1.84574231,
1.1349591 , 0.67010114, 0.45292292, 0.92742475, 0.78013033,
0.544481 , 0.84379695, 0.1651268 , 0.56914515, 0.78974058,
0.67275107, 0.70181217, 0.56341753, 0.63237691, 0.84123223,
0.80136236, 0.62630857, 0.79207921, 1.11111111, 17.65395894,
0.1479105 , 0.04403279, 0.08442285, 0.16 , 1.11868327,
4.17606227, 1.70144462, 0.73092295, 1. , 0.75767567,
18.57142857, 4.89795918, 0.60774269, 1.14938977, 0.48340172])
Zanimajo nas elementi, ki so manjši od določene meje. Naj bo
= 0.4 meja
Potem imamo
/ teze < meja vrednosti
array([False, False, True, True, False, False, True, True, False,
False, False, False, False, False, True, True, False, False,
True, False, False, False, True, False, False, False, True,
False, False, True, False, False, False, True, False, False,
True, True, True, False, True, False, False, False, False,
False, False, False, False, False, True, False, True, True,
False, False, False, True, False, False, False, False, False,
False, False, False, False, False, False, False, True, False,
True, True, False, False, False, False, False, False, False,
True, False, False, False, True, False, False, False, False,
False, False, False, False, False, False, False, False, False,
True, False, False, True, False, False, False, False, True,
False, False, False, False, True, True, False, False, False,
False, False, False, False, False, True, False, False, False,
False, False, False, False, False, False, False, False, False,
True, True, True, True, False, False, False, False, False,
False, False, False, False, False, False])
Če želimo iz seznama držav dobiti tiste, pri katerih je v tem seznamu
True
, napišemo
/ teze < meja] drzave[vrednosti
array(['Paraguay', 'Tunisia', 'Benin', 'Uruguay', 'Lebanon', 'Malaysia',
'Trinidad and Tobago', 'Argentina', 'South Africa', 'Mauritania',
'China', 'Nigeria', 'Burkina Faso', 'Colombia',
'Syrian Arab Republic', 'Barbados', 'Mali', 'Pakistan', 'Niger',
'Chile', 'Rwanda', 'Bhutan', 'Guatemala', 'Costa Rica', 'Nepal',
'Uganda', 'Zimbabwe', 'Bolivia', 'Afghanistan', 'Thailand',
'El Salvador', 'Nicaragua', 'Honduras', 'Burundi'], dtype='<U29')
Naša funkcija je potemtakem:
def srecne_drzave(teze, vrednosti, drzave, meja):
return drzave[vrednosti / teze < meja]
Ta je tako, za zraven. Neobvezno.
Dam vam funkcijo
def indeks_drzave(drzave, drzava):
return np.where(drzave == drzava)[0][0]
ki vrne indeks države v tabeli držav.
Napišite funkcijo vec_kot(teze, drzave, drzava)
, ki
prejme tabelo s težami, tabelo z državami in ime neke države. Vrne
število držav, ki so kupile več banan kot podana država.
indeks_drzave
potrebujemo samo zato, da izvemo, koliko
banan je kupila ta država.
= "Slovenia" drzava
"Slovenia") indeks_drzave(drzave,
np.int64(116)
"Slovenia")] teze[indeks_drzave(drzave,
np.int64(53954900)
Ko vemo, koliko kilogramov banan je kupila Slovenija, lahko sestavimo
tabelo, ki bo vsebovala True
za vse teže, ki so večje od
te.
> teze[indeks_drzave(drzave, "Slovenia")] teze
array([ True, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, True, False,
False, True, True, False, True, True, True, False, False,
False, False, False, False, False, False, True, False, True,
False, False, False, False, True, False, False, True, False,
False, False, False, False, False, False, False, False, False,
False, True, False, False, False, True, True, False, False,
True, False, False, True, False, True, False, True, True,
False, False, False, False, True, True, True, True, False,
False, True, False, False, False, False, False, True, False,
False, False, False, False, True, False, False, True, True,
False, False, False, False, True, False, True, False, False,
True, False, True, False, False, False, False, False, False,
False, True, False, False, True, False, False, False, True,
True, False, False, False, True, True, False, False, False,
True, False, True, False, False, False, False, False, False,
True, False, False, False, False, False])
Da ugotovimo, koliko je True
-jev, seštejemo elemente te
tabele.
sum(teze > teze[indeks_drzave(drzave, "Slovenia")])
np.int64(41)
In funkcija je:
def vec_kot(teze, drzave, drzava):
return sum(teze > teze[indeks_drzave(drzave, drzava)])