का तेज़ इंटरपोलेशन मैं 3-आयामी सरणी के अंदर डेटा के एक अक्ष को अलग करना चाहता हूं। अलग-अलग वैल के लिए दिए गए एक्स-मान थोड़ा भिन्न होते हैं लेकिन उन्हें सभी को समान एक्स-मानों पर मैप किया जाना चाहिए।एक सरणी अक्ष
के बाद दिए गए एक्स-मूल्यों समान नहीं हैं, वर्तमान में मैं निम्न कार्य करें:
import numpy as np
from scipy import interpolate
axes_have = np.ones((2, 72, 2001))
axes_have *= np.linspace(0, 100, 2001)[None,None,:]
axes_have += np.linspace(-0.3, 0.3, 144).reshape((2, 72))[:,:,None]
arr = np.sin(axes_have)
arr *= np.random.random((2, 72))[:,:,None]
axis_want = np.linspace(0, 100, 201)
arr_ip = np.zeros((2, 72, 201))
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
ip_func = interpolate.PchipInterpolator(axes_have[i,j,:], arr[i,j,:], extrapolate=True)
arr_ip[i,j,:] = ip_func(axis_want)
दो नेस्टेड for
-loops का उपयोग करते हुए आश्चर्य बहुत धीमी है।
क्या गति में सुधार करने का कोई तरीका है? शायद कुछ NumPy सरणी जादू या समांतरता करके।
क्या आप 'arr' का नमूना जोड़ सकते हैं? – DJK
मेरे उदाहरण में एक त्रुटि हुई, जो अभी तय है। अब 'एआर' दिया जाना चाहिए। – leviathan