Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9afe772

Browse files
committed
Improve speed
1 parenta2ddfc0 commit9afe772

File tree

1 file changed

+33
-28
lines changed
  • lib/matplotlib/projections

1 file changed

+33
-28
lines changed

‎lib/matplotlib/projections/geo.py

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
importmath
12
importnumpyasnp
23

34
frommatplotlibimport_api,rcParams
@@ -52,8 +53,8 @@ def cla(self):
5253

5354
self.grid(rcParams['axes.grid'])
5455

55-
Axes.set_xlim(self,-np.pi,np.pi)
56-
Axes.set_ylim(self,-np.pi/2.0,np.pi/2.0)
56+
Axes.set_xlim(self,-math.pi,math.pi)
57+
Axes.set_ylim(self,-math.pi/2.0,math.pi/2.0)
5758

5859
def_set_lim_and_transforms(self):
5960
# A (possibly non-linear) projection on the (already scaled) data
@@ -88,7 +89,7 @@ def _set_lim_and_transforms(self):
8889
Affine2D().translate(0,-4)
8990

9091
# This is the transform for latitude ticks.
91-
yaxis_stretch=Affine2D().scale(np.pi*2,1).translate(-np.pi,0)
92+
yaxis_stretch=Affine2D().scale(math.pi*2,1).translate(-math.pi,0)
9293
yaxis_space=Affine2D().scale(1,1.1)
9394
self._yaxis_transform= \
9495
yaxis_stretch+ \
@@ -108,8 +109,8 @@ def _set_lim_and_transforms(self):
108109

109110
def_get_affine_transform(self):
110111
transform=self._get_core_transform(1)
111-
xscale,_=transform.transform((np.pi,0))
112-
_,yscale=transform.transform((0,np.pi/2))
112+
xscale,_=transform.transform((math.pi,0))
113+
_,yscale=transform.transform((0,math.pi/2))
113114
returnAffine2D() \
114115
.scale(0.5/xscale,0.5/yscale) \
115116
.translate(0.5,0.5)
@@ -287,7 +288,7 @@ def inverted(self):
287288
returnAitoffAxes.AitoffTransform(self._resolution)
288289

289290
def__init__(self,*args,**kwargs):
290-
self._longitude_cap=np.pi/2.0
291+
self._longitude_cap=math.pi/2
291292
super().__init__(*args,**kwargs)
292293
self.set_aspect(0.5,adjustable='box',anchor='C')
293294
self.cla()
@@ -305,11 +306,11 @@ class HammerTransform(_GeoTransform):
305306
deftransform_non_affine(self,ll):
306307
# docstring inherited
307308
longitude,latitude=ll.T
308-
half_long=longitude/2.0
309+
half_long=longitude/2
309310
cos_latitude=np.cos(latitude)
310-
sqrt2=np.sqrt(2.0)
311+
sqrt2=2** (1/2)
311312
alpha=np.sqrt(1.0+cos_latitude*np.cos(half_long))
312-
x= (2.0*sqrt2)* (cos_latitude*np.sin(half_long))/alpha
313+
x= (2*sqrt2)* (cos_latitude*np.sin(half_long))/alpha
313314
y= (sqrt2*np.sin(latitude))/alpha
314315
returnnp.column_stack([x,y])
315316

@@ -324,15 +325,15 @@ def transform_non_affine(self, xy):
324325
x,y=xy.T
325326
z=np.sqrt(1- (x/4)**2- (y/2)**2)
326327
longitude=2*np.arctan((z*x)/ (2* (2*z**2-1)))
327-
latitude=np.arcsin(y*z)
328+
latitude=np.arcsin(y*z)
328329
returnnp.column_stack([longitude,latitude])
329330

330331
definverted(self):
331332
# docstring inherited
332333
returnHammerAxes.HammerTransform(self._resolution)
333334

334335
def__init__(self,*args,**kwargs):
335-
self._longitude_cap=np.pi/2.0
336+
self._longitude_cap=math.pi/2
336337
super().__init__(*args,**kwargs)
337338
self.set_aspect(0.5,adjustable='box',anchor='C')
338339
self.cla()
@@ -351,18 +352,18 @@ def transform_non_affine(self, ll):
351352
# docstring inherited
352353
defd(theta):
353354
delta= (-(theta+np.sin(theta)-pi_sin_l)
354-
/ (1+np.cos(theta)))
355+
/ (1.0+np.cos(theta)))
355356
returndelta,np.abs(delta)>0.001
356357

357358
longitude,latitude=ll.T
358-
359-
clat=np.pi/2-np.abs(latitude)
359+
pi_half=math.pi/2
360+
clat=pi_half-np.abs(latitude)
360361
ihigh=clat<0.087# within 5 degrees of the poles
361362
ilow=~ihigh
362363
aux=np.empty(latitude.shape,dtype=float)
363364

364365
ifilow.any():# Newton-Raphson iteration
365-
pi_sin_l=np.pi*np.sin(latitude[ilow])
366+
pi_sin_l=math.pi*np.sin(latitude[ilow])
366367
theta=2.0*latitude[ilow]
367368
delta,large_delta=d(theta)
368369
whilenp.any(large_delta):
@@ -372,12 +373,13 @@ def d(theta):
372373

373374
ifihigh.any():# Taylor series-based approx. solution
374375
e=clat[ihigh]
375-
d=0.5* (3*np.pi*e**2)** (1.0/3)
376-
aux[ihigh]= (np.pi/2-d)*np.sign(latitude[ihigh])
376+
d=np.cbrt(3.0*math.pi*e**2)/2
377+
aux[ihigh]= (pi_half-d)*np.sign(latitude[ihigh])
377378

378379
xy=np.empty(ll.shape,dtype=float)
379-
xy[:,0]= (2.0*np.sqrt(2.0)/np.pi)*longitude*np.cos(aux)
380-
xy[:,1]=np.sqrt(2.0)*np.sin(aux)
380+
sqrt2=2** (1/2)
381+
xy[:,0]= (sqrt2/pi_half)*longitude*np.cos(aux)
382+
xy[:,1]=sqrt2*np.sin(aux)
381383

382384
returnxy
383385

@@ -392,17 +394,18 @@ def transform_non_affine(self, xy):
392394
x,y=xy.T
393395
# from Equations (7, 8) of
394396
# https://mathworld.wolfram.com/MollweideProjection.html
395-
theta=np.arcsin(y/np.sqrt(2))
396-
longitude= (np.pi/ (2*np.sqrt(2)))*x/np.cos(theta)
397-
latitude=np.arcsin((2*theta+np.sin(2*theta))/np.pi)
397+
sqrt2=2** (1/2)
398+
theta=np.arcsin(y/sqrt2)
399+
longitude= (math.pi/ (2.0*sqrt2))*x/np.cos(theta)
400+
latitude=np.arcsin((2.0*theta+np.sin(2.0*theta))/math.pi)
398401
returnnp.column_stack([longitude,latitude])
399402

400403
definverted(self):
401404
# docstring inherited
402405
returnMollweideAxes.MollweideTransform(self._resolution)
403406

404407
def__init__(self,*args,**kwargs):
405-
self._longitude_cap=np.pi/2.0
408+
self._longitude_cap=math.pi/2
406409
super().__init__(*args,**kwargs)
407410
self.set_aspect(0.5,adjustable='box',anchor='C')
408411
self.cla()
@@ -434,15 +437,17 @@ def transform_non_affine(self, ll):
434437
clat=self._center_latitude
435438
cos_lat=np.cos(latitude)
436439
sin_lat=np.sin(latitude)
440+
cos_clat=np.cos(clat)
441+
sin_clat=np.sin(clat)
437442
diff_long=longitude-clong
438443
cos_diff_long=np.cos(diff_long)
439444

440445
inner_k=np.maximum(# Prevent divide-by-zero problems
441-
1+np.sin(clat)*sin_lat+np.cos(clat)*cos_lat*cos_diff_long,
446+
1.0+sin_clat*sin_lat+cos_clat*cos_lat*cos_diff_long,
442447
1e-15)
443-
k=np.sqrt(2/inner_k)
448+
k=np.sqrt(2.0/inner_k)
444449
x=k*cos_lat*np.sin(diff_long)
445-
y=k* (np.cos(clat)*sin_lat-np.sin(clat)*cos_lat*cos_diff_long)
450+
y=k* (cos_clat*sin_lat-sin_clat*cos_lat*cos_diff_long)
446451

447452
returnnp.column_stack([x,y])
448453

@@ -466,7 +471,7 @@ def transform_non_affine(self, xy):
466471
clong=self._center_longitude
467472
clat=self._center_latitude
468473
p=np.maximum(np.hypot(x,y),1e-9)
469-
c=2*np.arcsin(0.5*p)
474+
c=2.0*np.arcsin(0.5*p)
470475
sin_c=np.sin(c)
471476
cos_c=np.cos(c)
472477

@@ -485,7 +490,7 @@ def inverted(self):
485490
self._resolution)
486491

487492
def__init__(self,*args,center_longitude=0,center_latitude=0,**kwargs):
488-
self._longitude_cap=np.pi/2
493+
self._longitude_cap=math.pi/2
489494
self._center_longitude=center_longitude
490495
self._center_latitude=center_latitude
491496
super().__init__(*args,**kwargs)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp