2016-07-29 6 views
0

Ich arbeite in Python. Ich habe eine Winkelgröße, für die ich eine variierende Schrittgröße für das Array anstelle eines einheitlichen Gitters haben möchte, das wie np.linspace(0, pi, 100) für 100 gleiche Schritte erstellt werden kann. Stattdessen möchte ich mehr "Auflösung" (d. H. Eine kleinere Schrittgröße) für Werte nahe 0 und pi, wobei größere Schrittweiten näher an pi/2 rad liegen. Gibt es eine einfache Möglichkeit, dies in Python mit einer Technik zu implementieren, die bereits in numpy oder anderweitig zur Verfügung gestellt wurde?Differenzschrittweite für Array

+0

Schauen Sie sich 'np.logspace' wahrscheinlich an. – Divakar

+0

Benötigen Sie ein Nummernfeld oder eine Python-Liste? – Brendan

+0

entweder ein numpy Array oder eine Python-Liste würde tun – user4437416

Antwort

1

Hier ist, wie np.r_ zu verwenden, um ein Array mit engerem Abstand an dem Enden zu konstruieren, und breiter in der Mitte:

In [578]: x=np.r_[0:.09:10j, .1:.9:11j, .91:1:10j] 
In [579]: x 
Out[579]: 
array([ 0. , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 
     0.09, 0.1 , 0.18, 0.26, 0.34, 0.42, 0.5 , 0.58, 0.66, 
     0.74, 0.82, 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 
     0.97, 0.98, 0.99, 1. ]) 

dann x mit np.pi skalieren.

Dies ist die Art der Sache, die für np.r_ erstellt wurde. Nicht, dass es etwas Besonderes macht. Es tut das gleiche wie:

np.concatenate([np.linspace(0,.09,10), 
       np.linspace(.1,.9,11), 
       np.linspace(.91,1,10)]) 

Für eine reibungsloseren Abstufung in Abstand, würde ich versuchen, ein einzelnes linspace mit einer Kurve abbildet.

In [606]: x=np.arctan(np.linspace(-10,10,10)) 
In [607]: x -= x[0] 
In [608]: x /= x[-1] 
In [609]: x 
Out[609]: 
array([ 0.  , 0.00958491, 0.02665448, 0.06518406, 0.21519086, 
     0.78480914, 0.93481594, 0.97334552, 0.99041509, 1.  ]) 
+0

Vielen Dank für die klare und freundliche Antwort – user4437416