小编Max*_*der的帖子

Eq和Ord实例不一致?

我有一个很大的Haskell程序,运行速度非常慢.分析和测试表明,大部分时间花在比较非常重要的特定大型数据类型的相等和排序上.Equality是一个有用的操作(这是状态空间搜索,图搜索比树搜索更可取),但是我只需要这个类的Ord实例来使用Maps.所以我想要做的就是说

instance Eq BigThing where
(==) b b' = name b == name b' &&
            firstPart b == firstPart b' &&
            secondPart b == secondPart b' &&
            {- ...and so on... -}

instance Ord BigThing where
compare b b' = compare (name b) (name b')
Run Code Online (Sandbox Code Playgroud)

但由于不同对象的名称可能并不总是不同,这可能会导致奇怪的情况,即根据==,两个BigThings可能不等,但比较它们会产生EQ.

这会导致Haskell库出现问题吗?有没有其他方法可以满足详细的平等操作的要求,但便宜的订购?

haskell typeclass

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

使用 pdb 运行时多处理代码失败?

Python Multiprocessing相关的错误:AttributeError: module '__main__' has no attribute '__spec__',但由不同情况引起。

当我尝试使用 pdb 运行多处理代码时,我在 Python 3.7.4 中遇到了一个问题。该问题与https://docs.python.org/3.6/library/multiprocessing.html 中的基本多处理示例相同:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))
Run Code Online (Sandbox Code Playgroud)

这个运行正常(输出[1, 4, 9]时在Python经由直接运行)python.exe testcase.py。但是,它在 pdb 下不起作用;python.exe -m pdb testcase.py失败并出现错误:

Traceback (most recent call last):
  File "c:\python37\lib\pdb.py", line 1697, in main
    pdb._runscript(mainpyfile)
  File "c:\python37\lib\pdb.py", line 1566, in _runscript
    self.run(statement)
  File "c:\python37\lib\bdb.py", line 585, in …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pdb python-multiprocessing

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

SciPy 三次样条插值过程中的“无效输入数据”;interpolate.bisplrep 结果不好?

我正在尝试使用 scipy.interpolate.bisplrep 和 scipy.interpolate.bisplev 基于一小组已知差异对两个数据集之间的差异执行二维回归。代码是:

splineRT = interp.bisplrep(diffPoints[0], diffPoints[1], RTdiffs)
allDiffs = interp.bisplev(features[0], features[1], splineRT)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,bisplev 抛出难以理解的异常“ValueError: Invalid input data”,这是对从底层 _fitpack._bisplev 函数返回的错误代码的响应。我对样条知之甚少,不知道什么是无效描述,但我确实查看了 splineRT 的值,即:

[array([ 367.51732902,  367.51732902,  367.51732902,  367.51732902,
        911.4739006 ,  911.4739006 ,  911.4739006 ,  911.4739006 ]),
 array([ 1251.8868,  1251.8868,  1251.8868,  1251.8868,  1846.2027,
        1846.2027,  1846.2027,  1846.2027]),
 array([ -1.36687935e+04,   3.78197089e+04,  -6.83863404e+04,
        -7.25568790e+04,   4.90004158e+04,  -1.11701213e+05,
         2.02854711e+05,  -1.67569797e+05,  -7.22174063e+04,
         1.27574330e+05,  -2.33080009e+05,   2.80073578e+05,
         3.37054374e+04,   1.89380033e+04,  -1.81027026e+04,
        -2.51210000e+00]),
 3,
 3]
Run Code Online (Sandbox Code Playgroud)

令我印象深刻的是,前两个元素(表示样条中的“结”)是八个元素,仅由两个唯一值组成,每个值重复四次。两个唯一值都来自相应的 diffPoints 列表,但 diffPoints 都是 16 个唯一元素。

这里发生了什么?和/或是这个问题还是其他问题?任何帮助表示赞赏。

编辑:这是错误(?)的记录,从头到尾:https : //www.dropbox.com/s/w758s7racfy9q4s/interpolationBug.txt

python interpolation numpy spline scipy

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