我正在尝试使用病态的DBSCAN查找集群。这是代码-
db = DBSCAN(eps=.2, min_samples=5).fit(p)
cluster_labels = db.labels_
num_clusters = len(set(cluster_labels))
clusters = pd.Series([p[cluster_labels == n] for n in range(num_clusters)])
print(len(clusters))
C = np.empty(shape=(len(clusters), 2), dtype=np.float16)
for i in range(len(clusters)):
C[i] = np.mean(clusters[i], axis=0)
print(C)
我收到此运行时警告-
C:\Users\USER\PycharmProjects\REALDEPTH\venv\lib\site-packages\numpy\core\fromnumeric.py:3257:
RuntimeWarning: Mean of empty slice.
out=out, **kwargs)
C:\Users\USER\PycharmProjects\REALDEPTH\venv\lib\site-packages\numpy\core\_methods.py:154:
RuntimeWarning: invalid value encountered in true_divide
ret, rcount, out=ret, casting='unsafe', subok=False)
4
[[-1.369 1.895 ]
[ 0.2095 0.763 ]
[-0.572 1.688 ]
[ nan nan]]
我应该使用-
来避免它吗import warnings
warnings.simplefilter("ignore")
或者我有什么办法可以正确修复它?例如删除包含nan值的行。
编辑:到目前为止,似乎忽略NAN值并不会导致我尝试执行的操作以及尝试执行此操作的问题-
print(len(clusters))
C = np.empty(shape=(len(clusters), 2))
for i in range(len(clusters)):
if not np.isnan(C[i][0]):
print(np.isnan(C[i][0]))
C[i] = np.mean(clusters[i], axis=0, dtype=np.float64)
print(C[i][0])
print(C)
我得到此输出-
C:\Users\USER\PycharmProjects\REALDEPTH\venv\lib\site-packages\numpy\core\fromnumeric.py:3257: RuntimeWarning: Mean of empty slice.
out=out, **kwargs)
C:\Users\USER\PycharmProjects\REALDEPTH\venv\lib\site-packages\numpy\core\_methods.py:154: RuntimeWarning: invalid value encountered in true_divide
ret, rcount, out=ret, casting='unsafe', subok=False)
4
False
-1.4311423570879045
False
0.14525776544683858
False
-0.7161999985172942
False
nan
[[-1.43114236 1.9280001 ]
[ 0.14525777 0.79508425]
[-0.7162 1.73658117]
[ nan nan]]
我不明白,np.isnan(C [i] [0])返回的是false,但是值是NAN,我想念的是什么? 我的数据集p太大,无法在此处显示,但是没有NAN元素,也没有元素太接近零。
答案 0 :(得分:0)
像这样将您的nan值转换为零:
data = data.replace(np.nan,0)
答案 1 :(得分:0)
这实际上取决于您的数据以及如何处理此问题。这是预期的吗?您应该估算值吗?如果要使用nan
删除行,可以执行以下操作:
p[~np.isnan(p).any(axis=1)]
答案 2 :(得分:0)
阅读我们可以推断出问题的警告位于
np.mean(clusters [i],axis = 0)
由于您要获取数组仅用于 NAN元素的平均值(如果您具有一些数字,则不会出现此错误),因此会收到此警告。建议:您是否想在群集结果中看到这些NAN