小编che*_*eyp的帖子

DBSCAN错误与python中的余弦指标

我试图使用带有余弦度量的scikit-learn库中的DBSCAN算法,但却遇到了错误.代码行是

db = DBSCAN(eps=1, min_samples=2, metric='cosine').fit(X)    
Run Code Online (Sandbox Code Playgroud)

这里 X是一个csr_matrix.错误如下:

度量'余弦'对算法'auto'无效,

虽然文档说可以使用此指标.我尝试使用选项algorithm='kd_tree','ball_tree'但得到了相同.但是,如果我使用euclidean或者比如l1指标,则没有错误.

矩阵X很大,所以我不能使用成对距离的预先计算矩阵.

我用python 2.7.6scikit-learn 0.16.1.我的数据集没有完整的零行,因此余弦度量是明确定义的.

cluster-analysis data-mining cosine-similarity dbscan scikit-learn

6
推荐指数
2
解决办法
5982
查看次数

numpy.array 具有不同形状的元素

我想要一个由另外两个数组组成的 numpy 数组(每个数组都有不同的形状)。据我所知,出于这个原因,必须dtype = object在主数组的定义中使用:。

例如,让我们定义(在 Python 2.7 中)我们的数组为

     a0 = np.arange(2*2).reshape(2,2)
     a1 = np.arange(3*3*2).reshape(3,3,2)
     b = np.array([a0,a1], dtype = object)
Run Code Online (Sandbox Code Playgroud)

这很完美:b[1]a1. 但是如果我将维度a0从 (2,2)更改为 (3,3) 会发生一些奇怪的事情:

     a0 = np.arange(3*3).reshape(3,3)
     a1 = np.arange(3*3*2).reshape(3,3,2)
     b = np.array([a0,a1], dtype = object)
Run Code Online (Sandbox Code Playgroud)

这一次b[1]a1不平等,他们甚至有不同的形状。这种奇怪行为的原因是什么?

也许对我来说有一个完全不同的解决方案。但我不想使用列表或元组,因为我想允许添加诸如b + b. 很明显,我可以为此目的编写自己的类,但有没有更简单的方法?

python arrays numpy

5
推荐指数
1
解决办法
6447
查看次数