Tôi gặp vấn đề về hiệu suất cụ thể tại đây. Tôi đang làm việc với chuỗi thời gian dự báo khí tượng, mà tôi biên soạn thành một mảng 2ngày NumPy màThay đổi mảng numpy thanh lịch và điền NaN?
- dim0 = thời gian mà dự đoán loạt bắt đầu
- dim1 = dự báo đường chân trời, ví dụ. 0 đến 120 giờ
Bây giờ, tôi muốn dim0 có khoảng thời gian theo giờ, nhưng một số nguồn chỉ dự báo mỗi N giờ. Ví dụ, giả sử N = 3 và bước thời gian trong dim1 là M = 1 giờ. Sau đó, tôi nhận được một cái gì đó như
12:00 11.2 12.2 14.0 15.0 11.3 12.0
13:00 nan nan nan nan nan nan
14:00 nan nan nan nan nan nan
15:00 14.7 11.5 12.2 13.0 14.3 15.1
Nhưng tất nhiên có thông tin lúc 13:00 và 14:00, vì nó có thể được điền từ 12:00 dự báo chạy. Vì vậy, tôi muốn kết thúc với một cái gì đó như thế này:
12:00 11.2 12.2 14.0 15.0 11.3 12.0
13:00 12.2 14.0 15.0 11.3 12.0 nan
14:00 14.0 15.0 11.3 12.0 nan nan
15:00 14.7 11.5 12.2 13.0 14.3 15.1
cách nhanh nhất để đạt được điều đó là gì, giả sử dim0 được theo thứ tự của 1e4 và dim1 theo thứ tự của 1e2? Hiện tại tôi đang thực hiện từng hàng nhưng điều đó rất chậm:
nRows, nCols = dat.shape
if N >= M:
assert(N % M == 0) # must have whole numbers
for i in range(1, nRows):
k = np.array(np.where(np.isnan(self.dat[i, :])))
k = k[k < nCols - N] # do not overstep
self.dat[i, k] = self.dat[i-1, k+N]
Tôi chắc chắn phải có cách thanh lịch hơn để làm điều này? Bất kì gợi ý sẽ được đánh giá rất cao.
Bạn có quan tâm giải thích nó một cách khác, tôi đã bị mất trong câu "Nhưng tất nhiên. .. ". Các nguồn khác nhau được thể hiện như thế nào trong mảng? Các hàng có nghĩa là dim0 và dim1 = dimension1 = columns? – elyase
@elyase: Các con số đang được dịch chuyển xuống và sang trái, bởi vì, ví dụ, nếu dự báo là 12,2 giờ từ bây giờ (lúc 12:00), sau đó trong một giờ, dự báo sẽ là 12,2 giờ từ đó (lúc 13:00). – unutbu