Tôi muốn nội suy một trục dữ liệu bên trong mảng 3 chiều. Các giá trị x đã cho cho các giá trị khác nhau hơi khác nhau nhưng tất cả chúng phải được ánh xạ tới cùng một giá trị x.Nội suy nhanh của một trục mảng
Kể từ khi x-giá trị nhất định là không giống nhau, hiện nay tôi làm như sau:
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)
Sử dụng hai lồng nhau for
-loops là gì ngạc nhiên rất chậm.
Có cách nào để cải thiện tốc độ không? Có thể bằng cách thực hiện một số phép thuật mảng hoặc song song của NumPy.
bạn có thể thêm mẫu 'arr' không? – DJK
Đã xảy ra lỗi trong ví dụ của tôi, đã được khắc phục ngay bây giờ. 'arr' bây giờ sẽ được đưa ra. – leviathan