2012-04-30 16 views
9

fonksiyonu süreksiz olduğu bağlantı hatlarını düşmesi nasıl. Her işlev bir liste olarak verilir. Noktaları sadece fonksiyonun sürekli olduğu hatlarla bağlamak istiyorum.Birkaç kesintilere sahip bazı fonksiyonlarını projem var

Aşağıda, çizimin yapılışının basitleştirilmiş bir örneği verilmiştir.

x=linspace(0,1,100)  
y=zeros(100) 
y[x<0.5] = x[x<0.5] 
y[x>=0.5] = 1 + x[x>=0.5] 
plot(x, y, '-o') 

x = 0,5 de bir devamsızlık var, ancak çizim ardı ardına satırlarla tüm noktalara bağlanıyor.

İşlevlerim elbette farklıdır. Genellikle farklı yerlerde çeşitli süreksizliklere sahiptirler. Süreksizlik ölçütü basittir. Diyelim ki, fonksiyon 0,5'ten fazla atlarsa, o noktada kesintili olduğunu varsayalım.

Bağlantı hatlarının, fonksiyonun süreksiz olduğu noktalar arasında bağlantı çizgileri bırakmasını söylemek için bir seçenek var mı? Bunu gnuplot ile kolayca yapabildiğimi hatırlıyorum.

cevap

17

kullanım nan birden fazla parçaya hattını kırmak için:

import numpy as np 
from pylab import * 
x=linspace(0,1,100)  
y=zeros(100) 
y[x<0.5] = x[x<0.5] 
y[x>=0.5] = 1 + x[x>=0.5] 

pos = np.where(np.abs(np.diff(y)) >= 0.5)[0] 

x[pos] = np.nan 
y[pos] = np.nan 

plot(x, y, '-o') 

Düzenleme:

süreksizliklerinde nan eklemek için:

pos = np.where(np.abs(np.diff(y)) >= 0.5)[0]+1 
x = np.insert(x, pos, np.nan) 
y = np.insert(y, pos, np.nan) 

enter image description here

+1

teşekkür ederiz. İlginç bir fikir ama hiçbir noktayı kaybetmek istemiyorum. Süreksizliğin meydana geldiği yerde, absosyonlar arasında bir nan değeri ekleyebilirim. Ama bu garip ve çok yavaş olur. –

+0

Bu yüzden, cevabı nan değeriyle düzenledim. Orijinal verileri kopyalayacak, ancak çok hızlı. – HYRY

+0

Çok teşekkürler. Bu iyi çalışıyor. –

İlgili konular