小编Ser*_*nin的帖子

scikit-learn中的DBSCAN(仅限度量)

我有对象和距离函数,并希望使用DBSCAN方法聚类这些scikit-learn.我的物体在欧几里德空间中没有表示.我知道,可以使用precomputed公制,但在我的情况下,由于距离矩阵的大小,这是非常不切实际的.有没有办法克服这个问题scikit-learn?也许,有没有其他可以实现的DBSCAN python实现?

python cluster-analysis data-mining dbscan scikit-learn

3
推荐指数
1
解决办法
3874
查看次数

ctypes 浮动垃圾返回

当我尝试使用以下命令将 float 加载到 python 程序中时,我遇到了一个问题ctypes

C代码:

float test_ret_float(){
  return 1.0;
}
Run Code Online (Sandbox Code Playgroud)

在Python中,所有的方式都会产生垃圾:

print lib.test_ret_float()
>>1074161254
print c_float(lib.test_ret_float()).value
>>1074161280.0
Run Code Online (Sandbox Code Playgroud)

如果int一切正常的话。

看来,该类型对话没有按预期工作,并且确实返回raw4byte 值,该值未转换为floatbut int,为什么?

python ctypes

2
推荐指数
1
解决办法
3134
查看次数

显示实例奇怪的行为

我尝试进行培训,创建与Data.Tree相同的数据结构:

data MyTree a = Tree a [MyTree a] 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试为这个数据结构创建show instance时遇到了麻烦:

instance Show (MyTree a) where
  show (Tree a [v]) = show a -- Only first element
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

No instance for (Show a)
arising from a use of `show'
Run Code Online (Sandbox Code Playgroud)

这对我来说有些奇怪.因为我能看一眼功能能够适用于任何类型.

第二个问题:在标准库中使用了派生方法,但有一些奇怪的定义:

instance Eq a => Eq (Tree a)
instance Read a => Read (Tree a)
instance Show a => Show (Tree a)
instance Data a => Data (Tree a)
Run Code Online (Sandbox Code Playgroud)

这意味着什么?

haskell

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

python中"lambda"函数的不安全性

我想制作一个"走路"的模型.

在此输入图像描述

所以我创建了8个函数:

g0 = lambda ct: ct.append((lambda (x,y): (x-1,y))(ct[-1]))
g1 = lambda ct: ct.append((lambda (x,y): (x-1,y+1))(ct[-1]))
g2 = lambda ct: ct.append((lambda (x,y): (x,y+1))(ct[-1]))
g3 = lambda ct: ct.append((lambda (x,y): (x+1,y+1))(ct[-1]))
g4 = lambda ct: ct.append((lambda (x,y): (x+1,y))(ct[-1]))
g5 = lambda ct: ct.append((lambda (x,y): (x+1,y-1))(ct[-1]))
g6 = lambda ct: ct.append((lambda (x,y): (x,y-1))(ct[-1]))
g7 = lambda ct: ct.append((lambda (x,y): (x-1,y-1))(ct[-1]))
Run Code Online (Sandbox Code Playgroud)

但当我尝试应用任何功能时,我得到None:

print g0([(50,50)])
None
Run Code Online (Sandbox Code Playgroud)

好吧,Iet尝试更传统的方式:

def g0(ct):
    ct.append((lambda (x,y): (x-1,y))(ct[-1]))
    return ct
Run Code Online (Sandbox Code Playgroud)

这是按预期工作的:

[(50, 50), (49, 50)]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试

def g0(ct): …
Run Code Online (Sandbox Code Playgroud)

python lambda list

1
推荐指数
2
解决办法
135
查看次数

在Haskell中比较不同的类型

我有一些具有不同属性的对象,例如:

newtype Symbol = Symbol String
newtype Charge = Charge Int
...
Run Code Online (Sandbox Code Playgroud)

原则上,第二个参数可以是任意的:String,Int,Float等.

我有一个包装这些类型的数据类型:

data Property = forall a. (Show a) => Property a
Run Code Online (Sandbox Code Playgroud)

但我需要如何比较这些实例的方式.如果我写这样的话:

instance Eq Property where
    (Property a) == (Property b) = a == b
Run Code Online (Sandbox Code Playgroud)

它失败,因为编译器不知道a和b的类型.

问题是,如何使用这样的逻辑Eq实例Property:

  1. 如果ab是不同类型的,即SymbolVS Charge它始终是False.
  2. 如果ab属于同一类型,检查a == b

haskell

0
推荐指数
1
解决办法
71
查看次数