Đây là vấn đề của tôi: Tôi thao tác 432*46*136*136
lưới đại diện cho time*(space)
được bao gồm trong mảng có nhiều mảng và trăn. Tôi có một mảng alt
, bao gồm độ cao của các điểm lưới và một mảng khác temp
lưu trữ nhiệt độ của các điểm lưới.Chuyển đổi lưới numpy của Python sử dụng các chức năng phổ quát
Đó là vấn đề đối với một so sánh: nếu T1
và T2
hai kết quả, T1[t0,z0,x0,y0]
và T2[t0,z0,x0,y0]
đại diện cho nhiệt độ tại H1[t0,z0,x0,y0]
và mét, tương ứng. Nhưng tôi muốn so sánh nhiệt độ của các điểm ở cùng độ cao, không phải ở cùng một điểm lưới.
Do đó, tôi muốn sửa đổi trục z của ma trận để biểu thị độ cao chứ không phải điểm lưới. Tôi tạo ra một hàm conv(alt[t,z,x,y])
thuộc tính số từ -20 đến 200 cho mỗi độ cao. Đây là mã của tôi:
def interpolation_extended(self,temp,alt):
[t,z,x,y]=temp.shape
new=np.zeros([t,220,x,y])
for l in range(0,t):
for j in range(0,z):
for lat in range(0,x):
for lon in range(0,y):
new[l,conv(alt[l,j,lat,lon]),lat,lon]=temp[l,j,lat,lon]
return new
Nhưng điều này chắc chắn mất quá nhiều thời gian, tôi không thể làm việc này. Tôi đã cố gắng viết nó bằng cách sử dụng các chức năng phổ quát với numpy:
def interpolation_extended(self,temp,alt):
[t,z,x,y]=temp.shape
new=np.zeros([t,220,x,y])
for j in range(0,z):
new[:,conv(alt[:,j,:,:]),:,:]=temp[:,j,:,:]
return new
Nhưng điều đó không hiệu quả. Bạn có bất kỳ ý tưởng làm điều này trong python/numpy mà không cần sử dụng 4 vòng lồng nhau?
Cảm ơn bạn
Điều đó có thể là do các cuộc gọi hàm trong Python rất tốn kém. Tính toán trước tọa độ 'conv' với ví dụ: Phương thức numpy 'fromfunction' có thể hữu ích. – Ashalynd
Có lớn hơn 220 không? Nếu đó là trường hợp tôi có thể thấy lý do mã của bạn sẽ bị lỗi. – jfish003
Có phải 'conv' là bất kỳ kết hợp/hàm tuyến tính nào của' alt' không? Bạn có thể đưa ra một ví dụ hoặc đăng mã của bạn cho 'conv' không? Nếu 'conv' có thể được vector hóa, bạn có thể viết nó trong 1 lớp lót. –