ile veri kümelerinin saçılım oluşturun, ancak, benim bazı verilerin böyle, NaN
şunlardır: Çizmek/NaN
a = [1, 2, 3]
b = [1, 2, None]
pylab.scatter(a,b)
Bu NaN
değerini görüntülemezken gerçek değer noktalarını çizebileceğim bir yol var mı?
ile veri kümelerinin saçılım oluşturun, ancak, benim bazı verilerin böyle, NaN
şunlardır: Çizmek/NaN
a = [1, 2, 3]
b = [1, 2, None]
pylab.scatter(a,b)
Bu NaN
değerini görüntülemezken gerçek değer noktalarını çizebileceğim bir yol var mı?
NaN
s'yi kullanırsanız işler mükemmel çalışır. None
aynı şey değil. Bir NaN
bir şamandıradır. Örnek olarak
:
import numpy as np
import matplotlib.pyplot as plt
plt.scatter([1, 2, 3], [1, 2, np.nan])
plt.show()
verileri eksik işlemek istiyorsanız (verilerinizi yüklemek ve numpy.genfromtxt
) pandas
veya numpy maskeli diziler göz at. Maskeli diziler numpy içine yerleştirilmiştir, ancak pandas
son derece kullanışlı bir kütüphanedir ve çok iyi bir eksik değer işlevselliğine sahiptir. Bir örnek olarak
import matplotlib.pyplot as plt
import pandas
x = pandas.Series([1, 2, 3])
y = pandas.Series([1, 2, None])
plt.scatter(x, y)
plt.show()
pandas
maskelenmiş dizileri ayrı bir maske dizisi kullanırken, maskeli verileri temsil etmek için NaN
s kullanır. Bu, maskelenmiş dizilerin geçici olarak orijinal verileri koruduğu ve geçici olarak "eksik" veya "kötü" olarak işaretlendikleri anlamına gelir. Bununla birlikte, daha fazla bellek kullanırlar ve eksik verileri temsil etmek için NaN
s kullanılarak önlenebilecek gizli bir tutacakları vardır. maskeli diziler ve NaN
s ikisini de kullanarak başka örnek olarak
, doğru çizimi bu kez: Eğer 2B uzayda çizim Çünkü
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 6 * np.pi, 300)
y = np.cos(x)
y1 = np.ma.masked_where(y > 0.7, y)
y2 = y.copy()
y2[y > 0.7] = np.nan
fig, axes = plt.subplots(nrows=3, sharex=True, sharey=True)
for ax, ydata in zip(axes, [y, y1, y2]):
ax.plot(x, ydata)
ax.axhline(0.7, color='red')
axes[0].set_title('Original')
axes[1].set_title('Masked Arrays')
axes[2].set_title("Using NaN's")
fig.tight_layout()
plt.show()
, puanlarınız tarafından tanımlanması gerekir hem bir X hem de bir Y değeri. Değerlerden biri Yok ise, bu nokta 2B alanda bulunamaz, bu nedenle çizilemez, dolayısıyla hem Yok'u hem de karşılık gelen değeri diğer listeden kaldırmalısınız. Bunu gerçekleştirmenin birçok yolu vardır. İşte biri:
a = [1, 2, 3]
b = [1, None, 2]
i = 0
while i < len(a):
if a[i] == None or b[i] == None:
a = a[:i] + a[i+1:]
b = b[:i] + b[i+1:]
else:
i += 1
"""Now a = [1, 3] and b = [1, 2]"""
pylab.scatter(a,b)
Eğer dikkatli değilseniz [i] ... '. Her iki dizide de sıfır varsa bunları kaldıracaksınız. Sıfır mükemmel geçerli bir değer! –
@Joe Kington: Haklısınız. Gönderiyi düzenledim. –
o http://stackoverflow.com/questions/11620914/removing-nan-values-from-an-array anlatıldığı gibi NaN değerleri kaldırmak için yeterli misiniz? –