Author Archives: juhan

Bisogna essere precisi

mib4

Jake VanderPlas rockz! 🚀 e oggi recentemente ne ha dato un’ulteriore dimostrazione, con questo tweet.

Si sa che io ci metto un po’ a capire le cose e poi c’è il rischio che me le dimentico e allora ho deciso di mettere giù tutta la storia, qui in questo post.

Intanto con l’installazione di Anaconda (sempre per merito|colpa di Jake (e del suo corso su NumPy)) sono cambiati i comandi, ecco:

i0

Questo comporterà di ridefinire la shebang in caso di proteste degli script, l’evilussione 👿

OK, sono pronto per ripetere il test di Jake:

i1

Ecco 💥 errore! 😡

Twitter impone la concisione, a volte troppo. E Jake da per scontato che chi lo segue sia smart come lui. E anche i commentatori, tutti. Mi lasciano solo 😯

Però, dai, l’avevo già sentita questa raccomandazione: import * neanche una volta; che si potrebbe anche dire, con parole mie mai import *.
Verifico:

i2

Ecco, proprio come dice Jake: import *. Not even once.
Perché sum viene ridefinita in un modulo di Numpy, con altri argomenti.
OK, l’informatica e il mondo sono salvi; e io posso pensare ad altro 🎶 🎵 😄
:mrgreen:

SICP – cap. 2 – Esercizi: intervallo aritmetico – 10

nikon-small-world-air-bubbles-formed-from-melted-ascorbic-acid-crystals

Continuo da qui, oggi copio qui.

Esercizio esteso: intervallo aritmetico
Alyssa P. Hacker is designing a system to help people solve engineering problems. One feature she wants to provide in her system is the ability to manipulate inexact quantities (such as measured parameters of physical devices) with known precision, so that when computations are done with such approximate quantities the results will be numbers of known precision.
Alyssa è una lisp hacker 😜

Electrical engineers will be using Alyssa’s system to compute electrical quantities. It is sometimes necessary for them to compute the value of a parallel equivalent resistance Rp of two resistors R1 and R2 using the formula

s158

Resistance values are usually known only up to some tolerance guaranteed by the manufacturer of the resistor. For example, if you buy a resistor labeled “6.8 ohms with 10% tolerance” you can only be sure that the resistor has a resistance between 6.8 − 0.68 = 6.12 and 6.8 + 0.68 = 7.48 ohms. Thus, if you have a 6.8-ohm 10% resistor in parallel with a 4.7-ohm 5% resistor, the resistance of the combination can range from about 2.58 ohms (if the two resistors are at the lower bounds) to about 2.97 ohms (if the two resistors are at the upper bounds).

Alyssa’s idea is to implement “interval arithmetic” as a set of arithmetic operations for combining “intervals” (objects that represent the range of possible values of an inexact quantity). The result of adding, subtracting, multiplying, or dividing two intervals is itself an interval, representing the range of the result.

Alyssa postulates the existence of an abstract object called an “interval” that has two endpoints: a lower bound and an upper bound. She also presumes that, given the endpoints of an interval, she can construct the interval using the data constructor make-interval. Alyssa first writes a procedure for adding two intervals. She reasons that the minimum value the sum could be is the sum of the two lower bounds and the maximum value it could be is the sum of the two upper bounds:

(define (add-interval x y)
  (make-interval (+ (lower-bound x) 
                    (lower-bound y))
                 (+ (upper-bound x) 
                    (upper-bound y))))

Alyssa also works out the product of two intervals by finding the minimum and the maximum of the products of the bounds and using them as the bounds of the resulting interval. (min and max are primitives that find the minimum or maximum of any number of arguments.)

(define (add-interval x y)
  (make-interval (+ (lower-bound x) 
                    (lower-bound y))
                 (+ (upper-bound x) 
                    (upper-bound y))))

To divide two intervals, Alyssa multiplies the first by the reciprocal of the second. Note that the bounds of the reciprocal interval are the reciprocal of the upper bound and the reciprocal of the lower bound, in that order.

(define (add-interval x y)
  (make-interval (+ (lower-bound x) 
                    (lower-bound y))
                 (+ (upper-bound x) 
                    (upper-bound y))))

OK, con questo ecco…

Exercise 2.7: Alyssa’s program is incomplete because she has not specified the implementation of the interval abstraction. Here is a definition of the interval constructor:

(define (make-interval a b) (cons a b))

Define selectors upper-bound and lower-bound to complete the implementation.

Raccolgo per comodità nel file apa.rkt le 4 procedure che caricherò in Racket.

s159

A questo punto ecco i risultati

s160

AhemmmmBill the Lizard e sicp-ex.

Mi sa che si continuerà con questa roba, prossimamente 😳

:mrgreen:

Il Nuovo Mondo

build
C’è questo post di Mark Zuckerberg, quello di Facebook, che ci sto pensando su da qualche giorno. Per me intanto un anacoluto, per tanti altri articoli, commenti, roba.

Parlo per me: Facebook non mi piace più di tanto. Il mio social preferito è Twitter ma gli amici, quelli reali e quelli del Web sono su Facebook e allora ogni tanto ci faccio un salto anch’io. C’è chi riesce a sviluppare discorsi articolati (non faccio nomi ma è facile indovinare) con commenti e risposte adeguate. Ma quelli sono un’eccezione, almeno per me: ho 173 amici (di FB) ma quelli con cui interagisco davvero sono molto di meno, forse un ventesimo. Peccato perché sto perdendo i contatti con chi avevo iniziato, gente che conosco da fuori del Web. I giovani e chi non deve usare il ‘puter per lavoro ormai usa il telefono e magari altri social. O tanti hanno realizzato che sono noioso (assay) 😡

brainpinkyMa oltre a queste considerazioni perso(nali) non mi è chiaro cosa ha in mente Mark. O vuole conquistare il mondo? Non solo economicamente, politicamente. Ecco io sono vecchio ma sono mooolto contrario. Non vorrei trovarmi un Silvio globale (ah! forse c’è già, Donald; e un aspirante in locale, il #Fuffaro (questa pare sia una considerazione solo mia, kissene 😡)). È una mia fissa vecchia: uno dei film cult (per me) è Quarto potere (Citizen Kane), da studente avevo fatto una tesina (allora si diceva “ricerca”), peccato non averla conservata, sarebbe antiquariato.

E gli altri? C’è l’imbarazzo della scelta.

TBL, sir Tim Berners-Lee, è stato lui a dirmelo (ci sarei arrivato comunque aprendo FB); strano che il suo tweet non abbia avuto una risonanza più ampia.
Fabio Chiusi subito dopo twitta il primo link a uno dei primi articoli sull’argomento. E sì, conferma fin da subito i miei timori. Come dice Fabio, da leggere tutto.
Sempre di Fabio –uno da followare se siete su Twitter– due altre dritte, qui e qui.
Annalee Newitz su Ars Technica, kneel before Zuck, è drastica, sono d’accordo con lei: Mark Zuckerberg’s manifesto is a political trainwreck. He says that Facebook is developing AI to create a global democracy—kind of.
Il Guardian, The Observer view on Mark Zuckerberg: Facebook’s success is prophetic of a future in which we may all have to rely on a few all-powerful companies benevolently gifting us scraps like grants for struggling media organisations, or a meagre basic income to supplement poverty wages. But today, consumers and citizens still have the power to demand something different, and the laws of our lands still have the power to enforce it. We should act while we can.
The Atlantic, The Mark Zuckerberg Manifesto Is a Blueprint for Destroying Journalism. Secondo me non solo il giornalismo.
Sono più in sintonia con Polis: That Facebook vision thing: a platform still grappling with political realities: I initially described Mark Zuckerberg’s latest mission statement as ‘vacuous’. That was a rather rude way of saying that there is a vacuum at the heart of his rhetoric. It’s politics.
citizenkane

Visto nel Web – 275

Post luuungo, colpa di un suggeritore mysteryousassay, uno che rockz 😀
Ecco dunque cosa abbiamo wisto nel Web 😜

1ce75g8dcaln2wajoeswofq

Approximate inverse of the gamma function
#:programming, codice, snippet
::: John D. Cook ::: John D. Cook

Chiusura Centralizzata
#:free open source software
::: MadBob

The City Of Munich Now Wants To Abandon Linux And Switch Back to Windows
#:ditte #:free open source software #:politica
::: Slashdot

Going Isomorphic with Python and React
#:programming, codice, snippet #:Web, Internet
::: ThePracticalDev

Mission Possible: Self-Destructing Phones Are Now a Reality
#:sicurezza, spionaggio, virus #:censura
::: Slashdot

c1psikywgaauvwm

GitHub Commits Reveal The Top ‘Weekend Programming’ Languages
non i ipiù usati ma quelli che si vorrebbe usare 😄
#:linguaggi di programmazione
::: Slashdot

A framework for learning for programmers
#:linguaggi di programmazione #:programming, codice, snippet
::: ThePracticalDev

Behind the Internet’s Anti-Democracy Movement
#:censura #:politica
::: The Atlantic

African Nations Increasingly Silence Internet to Stem Protests
#:censura
::: kreissdaniel

takes Android-based Remix OS for a spin
#:sistemi operativi
::: linuxfoundation

c2sr

Introducing Wire: The Ideal Alternative to Skype for Linux
::: rewasp1973

Why I am learning Rust now
#:linguaggi di programmazione
::: ThePracticalDev

I just published the first two chapters in English of the Ubuntu
#:manuali, how to
::: letozaf

There is so much truth in this @dguido post, it actually hurts a little
#:sicurezza, spionaggio, virus #:dispositivi mobili
::: matthew_d_green

Next time you write else, consider flipping the logic
#:manuali, how to #:dispositivi mobili
::: copyconstruct

c3s1rmhwiaczmb7

deGNOMEing
#:programming, codice, snippet
::: Grab the Blaster

“Algorithmns” by Jeff Erickson
#:manuali, how to
::: b3h3m0th

Perl 6, the musical
#:linguaggi di programmazione
::: JJ Merelo

A Firefox Webextension to save interesting stuff found online
#:Web, Internet #:linguaggi di programmazione
::: Yet another wannabe programming blog

Machine learning: una sfida tanto umana …
#:artificial intelligence
::: Agile Big Data

r_67660_jxrzb

Some ways software development is like investing
#:programming, codice, snippet
::: wallingf

Easy Offline First Apps With Webpack’s Offline Plugin
#:programming, codice, snippet
::: ThePracticalDev

Creating Fractals with JavaScript
::: ThePracticalDev

so @twitter cares so little about privacy and the safety of its userbase that they gave the FBI Every Message. thats great
#:sicurezza, spionaggio, virus #:social media
::: rubblewoman

Understanding and Writing Compilers: A do-it-yourself guide
#:storia
::: b3h3m0th

c4tdaagwyaqsbz2-jpg-large

gli scenari infernali dell’ #IoT
#:Web, Internet
::: LucaCominassi

itertools — Iterator Functions
#:programming, codice, snippet
::: PyMOTW-3

Programming Concepts: Garbage Collection
#:programming, codice, snippet
::: ThePracticalDev

Regular Expressions Are Nothing to Fear
#:programming, codice, snippet
::: Doug Hellmann

Cybersecurity, allarme Copasir: “In Italia piattaforme-colabrodo”
#:sicurezza, spionaggio, virus
::: ICT

c40iauevcaama3u

#Google Maps si aggiorna
#:Web, Internet
::: SergioGridelli

Will we still have a single global internet in 2025?
#:Web, Internet
::: demartin

Nel 1946 il funzionamento dell’ENIAC, uno dei primi computer, viene mostrato alla UPenn
#:storia
::: formicablu

Come stare al passo con l’evoluzione della tecnologia
#:innovazioni, futuro
::: Tech Economy

c40yiezwyaa3kb3

Setting up a Minimal, Yet Useful JavaScript Dev Environment
#:linguaggi di programmazione
::: ThePracticalDev

Sapete perché Monaco cambia?
#:free open source software
::: Google+

L’intelligenza artificiale di Google diventa aggressiva
#:artificial intelligence
::: evilripper

A Linux distribution with built-in Tor integration
#:sistemi operativi
::: lucaciavatta

Motori di ricerca aggiunti a Chrome
#:Web, Internet #:sicurezza, spionaggio, virus
::: Siamo Geek

16640805_1129649930496395_4953675384735866540_n

Electron – Linux, Windows, MacOS? Un framework per conquistarli tutti!
#:novità
::: Eventbrite

Apple Will Fight ‘Right To Repair’ Legislation
#:ditte
::: Slashdot

Whatever is an Unofficial Evernote App for Linux
#:tools, componenti software
::: dcavedon

Cameroon’s Internet Outage Is Draining Its Economy
#:economia #:Web, Internet #:politica
::: LizWoolery

Tiny Python 3.6 Notebook
#:linguaggi di programmazione
::: __mharrison__

papa

Monaco torna al software proprietario?
#:ditte #:free open source software #:politica
::: Dario Cavedon

Racket will to run on the Chez Scheme VM within in the next few years, instead of the current Racket VM
uh! la rivoluzione 😄 niente sarà più come prima 😄 molto meglio 😄 fortunati voi giovani 😄
#:lisp(s)
::: wallingf ::: Hacker News

Linux Foundation releases business open source basics ebook
#:sistemi operativi
::: LinuxFansclub

Extreme Programming in Perl
#:programming, codice, snippet
::: b3h3m0th

City of #Munich wants to #end #opensource desktop
#:free open source software
::: eusebiofg

enhanced-buzz

La legge contro le fake news: un misto di ignoranza e voglia di censura
#:censura
::: fabiochiusi

Addio legge di Moore. E ora?
#:hardware
::: valeriopel

JavaScript Attack Breaks ASLR On 22 CPU Architectures
#:sicurezza, spionaggio, virus
::: Slashdot

Talk of tech innovation is bullsh*t. Shut up and get the work done – says Linus Torvalds
#:protagonisti
::: lazydevorg

Sulla persistenza dei dati
#:media
::: ulaulaman

cnraqj8xyaavyb2

L’ironia dello studente all’inaugurazione dell’Anno Accademico del Politecnico conquista tutti
#:innovazioni, futuro
::: la Stampa

Count the number of commas (,) in a text file
i comandi non sono più come li ricordo io (i.e. Unix), molte più opzioni
#:sistemi operativi
::: climagic

Implementing Programming Languages
#:manuali, how to
::: b3h3m0th

Compiler Construction; Principles of Programming Language Implementation
#:manuali, how to
::: b3h3m0th

C’è più visione politica nel “manifesto” di Zuckerberg che nel 99% dei programmi dei partiti e movimenti esistenti
#:ditte #:media
::: fabiochiusi

cvgbraewcaasjuf

Nell’anniversario del rogo a #GiordanoBruno, la Nuova Inquisizione del Politicamente Corretto non accende fuochi, ma scrive DDL
#:censura
::: carloalberto

Thoughts on my new laptop (Dell XPS 13 with Windows 10)
una visione completa sui ‘puters, ottima 😄
#:sistemi operativi
::: Daniel Lemire

Go 1.8 is released
#:linguaggi di programmazione
::: The Go Programming Language

Il digitale siamo noi connessi
#:censura #:media
::: I media-mondo

Una bella giornata di approfondimento sui temi dello “stare in rete”
#:Web, Internet
::: SergioGridelli

cx4xb3zxgaenqch

Anagrafe digitale unica? Un flop pressoché totale, solo 26 comuni su 8.000 l’hanno attivata
#:innovazioni, futuro
::: SergioGridelli

Hackerare Windows: SHIFT+F10 ed è subito magia!
forse nel frattempo hanno patch-ato
#:sicurezza, spionaggio, virus
::: TuxNews

99.6 Percent of New Smartphones Run Android or iOS
#:dispositivi mobili
::: Slashdot

The Cambridge Analytica story takes another turn
#:artificial intelligence #:bufale
::: marcelsalathe

chickenvaderbuttons

Write You a Haskell. Building a modern functional compiler from first principles
#:manuali, how to #:programmazione funzionale
::: b3h3m0th ::: b3h3m0th

Beyond Functional Programming: Manipulate Functions with the J Language
AP che ne dici? non sei il solo
#:linguaggi di programmazione
::: Adam Tornhill

History of Programming Languages
avendo tempo … 😊
::: Northeastern University

New LuaTeX 1.0.3
#:linguaggi di programmazione
::: luigi_scarso

kay

htop explained
#:tools, componenti software
::: Pēteris Ņikiforovs

Perl 6 One Liners
#:linguaggi di programmazione
::: b3h3m0th

Opening the Software Heritage archive
#:storia #:programming, codice, snippet
::: jbfavre

Un’Offerta che non si può Rifiutare
#:free open source software
::: MadBob

teddy

NumPy – 13 – Le basi degli arrays di NumPy – 2

and-ng

Continuo dal post precedente, sempre copiando qui.

Suddividere arrays, costruire sub-arrays
Just as we can use square brackets to access individual array elements, we can also use them to access subarrays with the slice notation, marked by the colon (:) character. The NumPy slicing syntax follows that of the standard Python list; to access a slice of an array x, use this:

x[start:stop:step]

np77

A potentially confusing case is when the step value is negative. In this case, the defaults for start and stop are swapped. This becomes a convenient way to reverse an array:

np78

Sub-arrays con arrays-multidimensionali
Multi-dimensional slices work in the same way, with multiple slices separated by commas.

np79

Finally, subarray dimensions can even be reversed together:

np80

Accedere a righe e colonne dell’array
One commonly needed routine is accessing of single rows or columns of an array. This can be done by combining indexing and slicing, using an empty slice marked by a single colon (:):

np81

In the case of row access, the empty slice can be omitted for a more compact syntax:

np82

Visualizzazione di subarrays senza copiare
One important –and extremely useful– thing to know about array slices is that they return views rather than copies of the array data. This is one area in which NumPy array slicing differs from Python list slicing: in lists, slices will be copies. Consider our two-dimensional array from before:

np83

Now if we modify this subarray, we’ll see that the original array is changed! Observe:

np84

This default behavior is actually quite useful: it means that when we work with large datasets, we can access and process pieces of these datasets without the need to copy the underlying data buffer.

Creare copie di arrays
Despite the nice features of array views, it is sometimes useful to instead explicitly copy the data within an array or a subarray. This can be most easily done with the copy() method:

np85

If we now modify this subarray, the original array is not touched:

np86

Continua 😀
:mrgreen:

Gestione dati esterni in Octave

Kazimir Majorinc

Kazimir Majorinc

Un altro post perso(nale) su Octave. Una continuazione di questo.

A volte, anzi spesso, capita di dover elaborare dati provenienti da altre applicazioni o da chissà dove. Si può fare.

Ecco un esempio elementare, nella directory corrente ci sono i due files carica.m e elab.m che definiscono le due funzioni che intenderemo usare.

carica.m:

function res = carica()
    global dati
    dati = [1, 2, 3, 4, 5];
endfunction

elab.m:

function res = elab()
    global dati
    res = (dati(1) + dati(2)) * (dati(3) + dati(4)) / dati(5); 
endfunction

g0

OK, notare che dati è in memoria ma non presente nell’ambiente; occorre l’invocazione a global

g1

Spesso i dati arrivano da un foglio di calcolo, come questi:

g2

In questo caso è sufficiente salvarli come CSV

1,2,3
4,5,6
7,8,9

e l’intervento per trasformare il file risultante in funzione risulta minimo.

Non è sempre così immediato: consideriamo numeri non interi, con la virgola come siamo abituati noi (nel foglio di calcolo, non come programmatori):

g3

In questo caso il CSV può, a seconda delle impostazioni, essere così

"1,1","2,2","3,3"
"4,4",5,6

in cui essendo il separatore di campo la virgola (convenzione usuale per gli americani) i numeri reali vengono trasformati in stringhe. C’è un quirk aggiuntivo per Octave: gli interi verranno trasformati in float, in genere non dovrebbe essere un problema.

Non è però possibile mischiare numeri e stringhe, se del caso suddividere i files di dati:

g4

La soluzione alternativa, che io preferisco, è di reimpostare il separatore di campo a punto-virgola. È tra l’altro, a quanto mi risulta, una condizione abituale. In questo caso il CSV diventa

1,1;2,2;3,3
4,4;5;6

Per renderli usabili con Octave sono necessarie un po’ di modifiche in entrambi i casi. Con Linux sono semplicissime, basta uno script; altrimenti un programmino di poche righe (con Python, probabilmente).

:mrgreen:

SICP – cap. 2 – cosa s’intende per dati? – esercizi – 9

mib2

Oggi qui, continuando da qui.

Exercise 2.6: In case representing pairs as procedures wasn’t mind-boggling enough, consider that, in a language that can manipulate procedures, we can get by without numbers (at least insofar as nonnegative integers are concerned) by implementing 0 and the operation of adding 1 as

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))

This representation is known as Church numerals, after its inventor, Alonzo Church, the logician who invented the λ-calculus.

Define one and two directly (not in terms of zero and add-1). (Hint: Use substitution to evaluate (add-1 zero)). Give a direct definition of the addition procedure + (not in terms of repeated application of add-1).

Devo confessare che non ci sono riuscito 👿
Ho provato per un po’ ma non sono andato oltre a questo:

s155

che è solo la verifica che zero e add-1 sono procedure correttamente definite. In questi casi attivo il liz-segnale e arriva Bill the Lizard 😄 che risolve spiegando tutto.

È tutto di là, riporto solo il risultato, semplicissimo (una volta fatto 😜), questo

(define one
  (lambda (f) (lambda (x) (f x))))

s156

A questo punto diventa semplice definire two, basta chiamare una volta in più la f dentro lambda:

(define two
  (lambda (f) (lambda (x) (f (f x)))))

s157

Di lì Bill generalizza per i numeri successivi, Bill davvero über-rockz 😄.

Una cosa simile anche da sicp-ex e Spaceman Aki ma manca la spiegazione.

SICP a volte è troppo impegnativo per me. O dovrei essere più motivato, sapere di dover passare l’esame, senza l’aiuto di Bill &co.

:mrgreen:

Arrotondamento con Octave e bc

nikon-small-world-scales-of-a-butterfly-wing

Post che interessa probabilmente solo me, perso(nale), ma mi devo anche autogiustificare per tempo perso per chissà quale errore (mio) 😡
Ieri mi sono perso a rifare con Octave una cosa elementare, c’è e funziona perfettamente con il foglio di calcolo (tipo Excel) di Libre Office.
Forse è uno skill che ho acquisito nel tempo: quando sono sotto pressione, con qualcuno che ti fa fretta, “è pronto?”, “quanto ci vuole?” non riesco a produrre niente di buono. E se, come ieri, non si lavora nello stesso ufficio la situazione peggiora, diventa più macchinoso confrontarsi, scambiarsi le opinioni.
OK, finito il pippone ecco la soluzione in due versioni. Una premessa: uso il terminale (sono l’unico) ma ovviamente è per l’ambiente integrato. Inoltre ho il solito (mio) alias:

a-1

Il problema –semplicissimo– è di arrotondare un numero, float, alla seconda cifra decimale. È poi immediata la generalizzazione a qualsiasi altra cifra.
La prima soluzione, quella usuale è di moltiplicare il numero per 100, convertirlo in intero (in realtà no per Octave ma diventa intero nel senso che perde la parte decimale) e infine dividerlo per 100. Così:

a0

La verifica visualizza che il nuovo numero, na, sia davvero senza coda. L’operazione potrebbe sembrare perversa ma ci sono dei casi in cui si devono fare somme e moltiplicazioni nelle quali il risultato dev’essere “esatto” 👽

Un approccio diverso è quello di trasformare il numero in stringa formattandola con una funzione della famiglia di printf e poi ricavare il numero dalla stringa ottenuta, così:

a1

OK 😄 Semplice vero? eppure ieri non veniva 😡

E con bc? questione che ha deviato la discussione e –mysteryousamente– fatto evaporare il bug 😜

Al solito ho un alias, lo rimuovo per essere standard

b0

Chi non è abituato a Linux trova cose strane: solo interi! Ma è subito pronta l’opzione, via scale, numero di cifre decimali:

b1

Solo che non fa quello che si vuole: invece dell’arrotondamento si ha il troncamento 😯
Ma, come si faceva anticamente in Fortran, basta aggiungere mezzo centesimo al numero da arrotondare e tutto torna (vero Giòrs? (chissà se mi legge)).

b2

Notare che la divisione per 1 in questo caso è richiesta. Uh poteva essere anche una moltiplicazione 😜

Una particolarità di bc che sorprende i nuovi: il risultato è corretto per quante cifre si vuole ma non per tutte quelle visualizzate. Ecco l’esempio con π, calcolato come si faceva –OOPS! 😯  già detto– a() è l’arcotangente.

b3

Per quel che ne so basta non fidarsi delle ultime 2.

Lo so che è un post perso, ma mi sono sfogato. Voi non leggetelo.

:mrgreen:

cit. & loll – 31

Giovedì e allora… ecco 😊

ogeexrwt-ktzd-u110012925576919cg-1024x576lastampa-it

Ils sont où les tests ?
::: CommitStrip

This is my new favorite comic
::: ml_barnett

Tu sei bravo con i software. Sei portato naturalmente. Come fai?
::: grostein

I like this story
::: ThePracticalDev

Software reuse is more like an organ transplant than snapping together Lego blocks
::: CompSciFact

clwn-cauoaawvnn

New Donald Trump programming language seeks to make programming great again
::: Functionalworks

Your software architecture when you started the project…
::: ico_TC

If you watch a video of a tree falling in a forest and it doesn’t make a sound
misteryousassay, anzi di più 👽
::: SwiftOnSecurity

Dopo gli ultimi attacchi #hacker sembra sia stata bandita la password 123456 dagli enti pubblici
::: Genjuro75

Farsi deridere in tutto il mondo
::: fabiochiusi

icon_window_unhappy

Engineers On Google’s Self-Driving Car Project Were Paid So Much That They Quit
da noi una cosa simile non si usa, mai 😀
::: Slashdot

Old Gold
vechia ma sempre bella 😜
::: 9GAGTweets

Human projection on the future of artificial intelligence uptake
::: EricTopol

Cards Against Developers
::: ThePracticalDev

Size matters
::: mpietropoli

c4o2fnkueaa0rgs

Modern Software Development
::: manisha72617183

Chissà, magari un fax
::: Didonezombie

It’s so hard to use
::: CompSciFact

Declared my income tax for 2016 today
::: TaaviRoivas

juggler

NumPy – 12 – Le basi degli arrays di NumPy – 1

larry

Copio qui, continuando da qui.

Data manipulation in Python is nearly synonymous with NumPy array manipulation: even newer tools like Pandas (Chapter 3 [prossimamente]) are built around the NumPy array. This section will present several examples of using NumPy array manipulation to access data and subarrays, and to split, reshape, and join the arrays. While the types of operations shown here may seem a bit dry and pedantic, they comprise the building blocks of many other examples used throughout the book. Get to know them well!

We’ll cover a few categories of basic array manipulations here:

  • Attributes of arrays: Determining the size, shape, memory consumption, and data types of arrays
  • Indexing of arrays: Getting and setting the value of individual array elements
  • Slicing of arrays: Getting and setting smaller subarrays within a larger array
  • Reshaping of arrays: Changing the shape of a given array
    Joining and splitting of arrays: Combining multiple arrays into one, and splitting one array into many

Attributi degli arrays di NumPy
First let’s discuss some useful array attributes. We’ll start by defining three random arrays, a one-dimensional, two-dimensional, and three-dimensional array. We’ll use NumPy’s random number generator, which we will seed with a set value in order to ensure that the same random arrays are generated each time this code is run:

np68

Each array has attributes ndim (the number of dimensions), shape (the size of each dimension), and size (the total size of the array):

np69

Another useful attribute is the dtype, the data type of the array (which we discussed previously [post precedente]):

np70

Other attributes include itemsize, which lists the size (in bytes) of each array element, and nbytes, which lists the total size (in bytes) of the array:

np71

Indicizzazione degli arrays, accedere singoli elementi
If you are familiar with Python’s standard list indexing, indexing in NumPy will feel quite familiar. In a one-dimensional array, the ith value (counting from zero) can be accessed by specifying the desired index in square brackets, just as with Python lists:

np72

To index from the end of the array, you can use negative indices:

np73

In a multi-dimensional array, items can be accessed using a comma-separated tuple of indices:

np74

Values can also be modified using any of the above index notation:

np75

Keep in mind that, unlike Python lists, NumPy arrays have a fixed type. This means, for example, that if you attempt to insert a floating-point value to an integer array, the value will be silently truncated. Don’t be caught unaware by this behavior!

np76

La storia è ancora lunga, pausa 😉

:mrgreen: