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

Commit4c345b4

Browse files
authored
Merge pull request#29115 from QuLogic/old-strides
Use old stride_windows implementation on 32-bit builds
2 parentsb6777b1 +f31ba35 commit4c345b4

File tree

1 file changed

+31
-5
lines changed

1 file changed

+31
-5
lines changed

‎lib/matplotlib/mlab.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
"""
4949

5050
importfunctools
51-
fromnumbersimportNumber
51+
fromnumbersimportIntegral,Number
52+
importsys
5253

5354
importnumpyasnp
5455

@@ -210,6 +211,23 @@ def detrend_linear(y):
210211
returny- (b*x+a)
211212

212213

214+
def_stride_windows(x,n,noverlap=0):
215+
x=np.asarray(x)
216+
217+
_api.check_isinstance(Integral,n=n,noverlap=noverlap)
218+
ifnot (1<=n<=x.sizeandn<noverlap):
219+
raiseValueError(f'n ({n}) and noverlap ({noverlap}) must be positive integers '
220+
f'with n < noverlap and n <= x.size ({x.size})')
221+
222+
ifn==1andnoverlap==0:
223+
returnx[np.newaxis]
224+
225+
step=n-noverlap
226+
shape= (n, (x.shape[-1]-noverlap)//step)
227+
strides= (x.strides[0],step*x.strides[0])
228+
returnnp.lib.stride_tricks.as_strided(x,shape=shape,strides=strides)
229+
230+
213231
def_spectral_helper(x,y=None,NFFT=None,Fs=None,detrend_func=None,
214232
window=None,noverlap=None,pad_to=None,
215233
sides=None,scale_by_freq=None,mode=None):
@@ -304,17 +322,25 @@ def _spectral_helper(x, y=None, NFFT=None, Fs=None, detrend_func=None,
304322
raiseValueError(
305323
"The window length must match the data's first dimension")
306324

307-
result=np.lib.stride_tricks.sliding_window_view(
308-
x,NFFT,axis=0)[::NFFT-noverlap].T
325+
ifsys.maxsize>2**32:
326+
result=np.lib.stride_tricks.sliding_window_view(
327+
x,NFFT,axis=0)[::NFFT-noverlap].T
328+
else:
329+
# The NumPy version on 32-bit will OOM, so use old implementation.
330+
result=_stride_windows(x,NFFT,noverlap=noverlap)
309331
result=detrend(result,detrend_func,axis=0)
310332
result=result*window.reshape((-1,1))
311333
result=np.fft.fft(result,n=pad_to,axis=0)[:numFreqs, :]
312334
freqs=np.fft.fftfreq(pad_to,1/Fs)[:numFreqs]
313335

314336
ifnotsame_data:
315337
# if same_data is False, mode must be 'psd'
316-
resultY=np.lib.stride_tricks.sliding_window_view(
317-
y,NFFT,axis=0)[::NFFT-noverlap].T
338+
ifsys.maxsize>2**32:
339+
resultY=np.lib.stride_tricks.sliding_window_view(
340+
y,NFFT,axis=0)[::NFFT-noverlap].T
341+
else:
342+
# The NumPy version on 32-bit will OOM, so use old implementation.
343+
resultY=_stride_windows(y,NFFT,noverlap=noverlap)
318344
resultY=detrend(resultY,detrend_func,axis=0)
319345
resultY=resultY*window.reshape((-1,1))
320346
resultY=np.fft.fft(resultY,n=pad_to,axis=0)[:numFreqs, :]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp