Domanda Linspace vs range


Mi stavo chiedendo quale sia lo stile migliore / più efficiente:

x = linspace(-1, 1, 100);

o

x = -1:0.01:1;

14
2018-04-25 14:20


origine


risposte:


Come menzionato da Oli Charlesworth, in linspace dividi l'intervallo [a,b] in N punti, mentre con il : forma, esci da a con una dimensione di passo specificata (default 1) fino a raggiungere b.

Una cosa da tenere a mente è quella linspace  sempre include i punti finali, mentre, : la forma includerà il secondo end-point, solo se la dimensione del passo è tale da ricadere su di essa nell'ultimo passaggio altrimenti non sarà possibile. Esempio:

0:3:10

ans = 

     0     3     6     9

Detto questo, quando uso i due approcci dipende da cosa devo fare. Se tutto quello che devo fare è campionare un intervallo con un numero fisso di punti (e non mi interessa la dimensione del passo), io uso linspace.

In molti casi, non mi interessa se non cade sull'ultimo punto, ad esempio quando si lavora con coordinate polari, non ho bisogno dell'ultimo punto, come 2*pi equivale a 0. Lì, io uso 0:0.01:2*pi.


16
2018-04-25 14:38



Come sempre, usa quello che meglio si adatta ai tuoi scopi e che esprime al meglio le tue intenzioni. Quindi usa linspace quando conosci il numero di punti; uso : quando conosci la spaziatura.

[Per inciso, i tuoi due esempi non sono equivalenti; il secondo ti darà 201 punti.]


12
2018-04-25 14:22



Come già sottolineato Oli, di solito è più facile da usare linspace quando conosci il numero di punti che vuoi e il operatore del colon quando conosci il spaziatura vuoi tra gli elementi.

Tuttavia, va notato che i due spesso non ti danno Esattamente gli stessi risultati. Come notato Qui e Qui, i due approcci usano metodi leggermente diversi per calcolare gli elementi vettoriali (ecco una descrizione archiviata di come funziona l'operatore del colon). Ecco perché questi due vettori non sono uguali:

>> a = 0:0.1:1;
>> b = linspace(0,1,11);
>> a-b

ans =

  1.0e-016 *

  Columns 1 through 8

         0         0         0    0.5551         0         0         0         0

  Columns 9 through 11

         0         0         0

Questo è un tipico effetto collaterale di come i numeri in virgola mobile sono rappresentati. Alcuni numeri non possono essere Esattamente rappresentato (come 0.1) ed eseguendo lo stesso calcolo in modi diversi (cioè cambiando l'ordine delle operazioni matematiche) può portare a risultati sempre leggermente diversi, come mostrato nell'esempio precedente. Queste differenze sono in genere sul ordine della precisione in virgola mobilee può spesso essere ignorato, ma devi sempre essere consapevole che esistono.


6
2018-04-25 14:37