abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 22:22 | Nová verze

    Po pěti měsících vývoje byla vydána nová verze 0.15.1 programovacího jazyka Zig (GitHub, Wikipedie). Verze 0.15.0 byla přeskočena. Přispělo 162 vývojářů. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 21:55 | Komunita

    Před sedmi lety společnost Valve představila fork projektu Wine s názvem Proton umožňující v Linuxu přímo ze Steamu hrát počítačové hry do té doby běžící pouze ve Windows. Aktuální přehled podporovaných her na stránkách ProtonDB

    Ladislav Hagara | Komentářů: 0
    dnes 14:55 | IT novinky

    Společnost DuckDuckGo rozšířila svůj AI chat Duck.ai o GPT-5 mini (𝕏). Duck.ai umožňuje anonymní přístup bez vytváření účtů k několika modelům umělé inteligence. Aktuálně k GPT-4o mini, GPT-5 mini, Llama 4 Scout, Claude Haiku 3.5 a Mistral Small 3.

    Ladislav Hagara | Komentářů: 5
    dnes 12:44 | Bezpečnostní upozornění

    Marek Tóth v příspěvku DOM-based Extension Clickjacking: Data ve správcích hesel v ohrožení na svém blogu popsal novou clickjacking techniku s několika variantami útoků a otestoval ji proti 11 správcům hesel. Výsledkem bylo nalezení několika 0-day zranitelností, které mohly ovlivnit uložená data desítek milionů uživatelů. Jedno kliknutí kdekoliv na webové stránce kontrolované útočníkem umožňovalo ukrást uživatelská data ze

    … více »
    Ladislav Hagara | Komentářů: 1
    včera 21:11 | IT novinky

    Na dnešní akci Made by Google 2025 (YouTube) byly představeny telefony Pixel 10 s novým čipem Google Tensor G5 a novými AI funkcemi, hodinky Pixel Watch 4 a sluchátka Pixel Buds 2a.

    Ladislav Hagara | Komentářů: 25
    včera 14:11 | Nová verze

    The Document Foundation oznámila vydání nové major verze 25.8 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs) a také na Youtube a PeerTube.

    Ladislav Hagara | Komentářů: 14
    včera 04:00 | Nová verze

    Zeek (Wikipedie), původně Bro, byl vydán v nové major verzi 8.0.0. Jedná se o open source platformu pro analýzu síťového provozu. Vyzkoušet lze online.

    Ladislav Hagara | Komentářů: 0
    19.8. 23:55 | Zajímavý software

    Emacs na stříhání videa? Klidně.

    Ladislav Hagara | Komentářů: 7
    19.8. 15:55 | Nová verze

    Byl vydán Mozilla Firefox 142.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 142 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    19.8. 13:22 | Zajímavý článek

    Python Developers Survey 2024, výsledky průzkumu mezi vývojáři v Pythonu organizovaném Python Software Foundation ve spolupráci se společností JetBrains v říjnu a listopadu loňského roku. Zúčastnilo se 30 tisíc vývojářů z 200 zemí. Linux používá 59 % z nich.

    Ladislav Hagara | Komentářů: 0
    Pro otevření více webových stránek ve webovém prohlížečí používám
     (76%)
     (11%)
     (5%)
     (3%)
     (5%)
     (0%)
    Celkem 38 hlasů
     Komentářů: 6, poslední dnes 13:35
    Rozcestník

    Dotaz: Perl - Pole a třídění

    27.11.2010 14:38 Radek Podskubka | skóre: 2
    Perl - Pole a třídění
    Přečteno: 432×
    Ahoj, potřebuju v perlu seřadit nějaké hodnoty za tím účelem, abych mohl určit jejich medián. Problém je v tom, že k těmto hodnotám přísluší ještě nějaké odchylky. Data ukládám do pole z texťáku, kde jsou v jednom sloupci hodnoty a ve druhém jejich chyby. A medián určuju pro jednotlivé dny (tedy v prvním sloupci figuruje ještě nějaké datum, ale to není podstatné, navíc je to vidět z kódu). V přiložený kód funguje dobře, v podstatě jen určuje medián příslušných hodnot. Ovšem já bych potřeboval do výstupu ještě k mediánu vytisknout odchylku, která k němu přísluší (tedy NE medián odchylek). Problém tedy nastává v okamžiku, kdy se provádí příkaz
    @vars = sort @{$dailyvars{$_}};
    Pokud bych měl tedy uloženy odchylky v podobném poli jako hodnoty, a tímto způsobem zamíchám s jejich pořadím,tak už nepřísluší například pátý prvek pole vars k pátému prvku pole odchylek. Principielně je snad řešení snadné, prostě kromě hodnot je třeba naskládat do pole @{dailyvars{1}} ještě odkazy na konkrétní prvky pole odchylek a na ty se potom odvolávat. Já jsem ale v Perlu doccela nováček a netuším jak tohle zapsat nebo mě nenapadá nějaké snažší řešení. Děkuji za každou radu.

    Celý výpis kódu je zde
    while (<>)
    {
        if (/^#/) { next; }
        /([\d-]+) (\d+) ([\d\.]+) ([\d\.]+)/ or die "daily_median.pl: Error processing line: $_";
        if (! exists $dailyvars{$1}) { @{$dailyvars{$1}} = ( $3 ); $count{$1} = 1; }
        else { push @{$dailyvars{$1}}, $3; $count{$1} += 1; }
    }
    foreach (sort keys %dailyvars)
    {
        @vars = sort @{$dailyvars{$_}};
        $n = $#vars + 1;
        if ($n % 2 == 1) {
    	$median = $vars[($n - 1) / 2]; }
        else {
    	$median = ($vars[$n / 2] + $vars[$n / 2 - 1]) / 2; }
        print $_ . " $median " . $count{$_} . "\n";
    }
    

    Řešení dotazu:


    Odpovědi

    Řešení 2× (Radek Podskubka (tazatel), pht)
    27.11.2010 15:42 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Perl - Pole a třídění
    Myslím, že Tvé řešení je špatně: sort v perlu defaultně třídí lexikograficky, nikoliv číselně.

    K problému: pokud by při načítání byla odchylka např. v $4:
    if (! exists $dailyvars{$1}) { @{$dailyvars{$1}} = ({var => $3, odchylka => $4}); $count{$1} = 1; }
    else { push @{$dailyvars{$1}}, {var => $3, odchylka => $4}; $count{$1} += 1; }
    
    ...
    
    @vars = sort { $a->{var} <=> $b->{var} } (@{$dailyvars{$_}});
    
    ...
    
    $median = $vars[($n - 1) / 2]->{var};
    
    
    A další změny analogicky.

    Vtip je v tom, že do $dailyvars{$den} neukládáš jen hodnoty, ale ukazatele na hash, který má dva klíče: var a odchylka. Tím si podržíš ty přidružené hodnoty pospolu.

    Doufám, že je to trochu srozumitelné, spěchám, tak to vysvětluju tak nějak narychlo a ne moc exaktně. Podívej se do manuálu na sort, tam uvidíš, že to, co dávám do prvních složených závorek, je funkce, která určuje, podle čeho se bude třídit.
    27.11.2010 17:16 Radek Podskubka | skóre: 2
    Rozbalit Rozbalit vše Re: Perl - Pole a třídění
    Dík moc. To je určitě velmi efektivní řešení. Pomohlo mi to.
    wamba avatar 27.11.2010 18:16 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Perl - Pole a třídění

    popř. něco takového

    use 5.010;
    use warnings;
    use strict;

    my %dailyvars;

    while (<>) {
    next if /^#/;    #ignoruj komentáře
    /(?<date>[\d-]+) \d+ (?<var>[\d\.]+) (?<odchylka>[\d\.]+)/ #rozeber řádek
    or die "daily_median.pl: Error processing line: $_";

    push @{ $dailyvars{ $+{date} }{vars} },
    $+{var};    #přidej hodnotu mezi hodnoty
    push @{ $dailyvars{ $+{date} }{'odchylky'} },
    $+{odchylka};    #přidej odchylku mezi odchylky
    $dailyvars{ $+{date} }{count}++;    #přičti k počtu 1
    }

    foreach ( sort keys %dailyvars ) {      #pro všechny  dny (seřazené)
    my $median;
    my @vars = sort { $a <=> $b } @{ $dailyvars{$_}{vars} };  #srovnej hodnoty
    my $n = @vars;                                            #počet  hodnot;

    if ( $n % 2 == 1 ) {
    $median = $vars[ ( $n - 1 ) / 2 ]
    ;    #vypočti median pro  sudý počet hondot
    }
    else {
    $median = ( $vars[ $n / 2 ] + $vars[ $n / 2 - 1 ] )
    / 2;    #vypočti median pro lichý počet hodnot
    }

    #vypiš výsledek
    say $_
    . "\tmedian: $median "
    . "\tpocet: $dailyvars{$_}{count} "
    . "\todchylky:  @{ $dailyvars{$_}{odchylky} }";
    }

    This would have been so hard to fix when you don't know that there is in fact an easy fix.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.