2012-08-09 36 views
5

Tôi đã viết một mã mà thực hiện một suy spline:Python Giữ điểm trong spline suy

x1 = [ 0., 13.99576991, 27.99153981, 41.98730972, 55.98307963, 69.97884954, 83.97461944, 97.97038935, 111.9661593, 125.9619292, 139.9576991, 153.953469 ] 
y1 = [ 1., 0.88675318, 0.67899118, 0.50012243, 0.35737022, 0.27081293, 0.18486778, 0.11043095, 0.08582272, 0.04946131, 0.04285015, 0.02901567] 

x = np.array(x1) 
y = np.array(y1) 

# Interpolate the data using a cubic spline to "new_length" samples 
new_length = 50 
new_x = np.linspace(x.min(), x.max(), new_length) 
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x) 

Nhưng trong tập dữ liệu mới được tạo new_xnew_y các điểm gốc được loại bỏ, chỉ là người đầu tiên và các giá trị cuối cùng được lưu giữ . Tôi muốn giữ nguyên điểm gốc.

+1

tại sao bạn không làm vậy 'new_y = sp.interpolate.interp1d (x, y, kind =' cubic ') (x) ' –

Trả lời

6

Phải, linspace sẽ không tạo bất kỳ giá trị nào trong x ngoại trừ những giá trị bạn chuyển cho nó (x.min()x.max()).

Tôi không có một câu trả lời linh hoạt tuyệt vời, nhưng đây là một cách để làm điều đó:

# Interpolate the data using a cubic spline to "new_length" samples 
new_length = 50 
interpolated_x = np.linspace(x.min(), x.max(), new_length - len(x) + 2) 
new_x = np.sort(np.append(interpolated_x, x[1:-1])) # include the original points 
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x) 

Mã này sử dụng:

  • np.linspace để tạo ra càng nhiều điểm thêm khi chúng ta cần
  • np.append để kết hợp mảng điểm bổ sung với các điểm ban đầu từ x
  • np.sort để đặt mảng được kết hợp theo thứ tự
+0

Cảm ơn bạn rất nhiều! Nó đã làm việc. – Hellfish

Các vấn đề liên quan