我想使用Right _
中的import Control.Monad (foldM)
import Data.List (sort)
import Data.Bool (bool)
anyDupe' :: (Eq a, Ord a, Enum a) => [a] -> Either a a
anyDupe' xs = foldM f i $ sort xs
where i = succ $ head xs -- prevent the initial value to be equal with the value at the head
f = \b a -> bool (Left a) (Right a) (a /= b)
*Main> anyDupe' [1,2,3,4,5]
Right 5
*Main> anyDupe' [3,3,6,1]
Left 3
*Main> anyDupe' $ 1:[10^7,(10^7-1)..1]
Left 1
(2.97 secs, 1,040,110,448 bytes)
*Main> anyDupe $ 1:[10^7,(10^7-1)..1]
Left 1
(2.94 secs, 1,440,112,888 bytes)
*Main> anyDupe' $ [1..10^7]++[10^7]
Left 10000000
(5.71 secs, 3,600,116,808 bytes) -- winner by far
*Main> anyDupe $ [1..10^7]++[10^7] -- don't try at home, it's waste of energy
应用一个非常简单的函数。这是代码:
anyDupe'
但是当我执行它时,出现以下错误:
ndimage.generic_filter()
尝试将scipy
强制转换为import numpy as np
import scipy.ndimage as ndimage
data = np.random.rand(400,128)
dimx = int(np.sqrt(np.size(data,0)))
dimy = dimx
coord = np.random.randint(np.size(data,0), size=(dimx,dimy))
def test_func(values):
idx_center = int(values[4])
weight_center = data[idx_center]
weights_around = data[values]
differences = weights_around - weight_center
distances = np.linalg.norm(differences, axis=1)
return np.max(distances)
results = ndimage.generic_filter(coord,
test_func,
footprint = np.ones((3,3)))
时。如果我在不对随机数组SystemError: <class 'int'> returned a result with an error set
使用values[4]
的情况下运行函数int
,则该函数可以正常工作。
为什么会发生此错误?有办法使它起作用吗?
答案 0 :(得分:2)
针对您的情况:
这必须是Python或SciPy中的错误。请在rusqlite和/或https://bugs.python.org处提交错误。包括Python和NumPy / SciPy的版本号,您在此处拥有的完整代码以及整个回溯。
(此外,如果您找到一种无需使用随机性即可触发此错误的方法,他们可能会很感激。但是,如果您找不到这种方法,请按照以下方式归档:是。
通常:
“ [R]返回的结果带有错误集”是只能在C级别执行的操作。 通常,Python / C API期望大多数C函数执行以下两项操作之一:
NULL
(相当于引发例外)。PyObject*
(对应于返回值,包括these functions)。这两种情况通常是不正确的:
NULL
以外的其他值。NULL
。 Python之所以提出SystemError
是因为Python标准库中int
的实现试图做到(3),这可能是SciPy首先这样做的结果。这始终是错误的,因此Python或其调用的SciPy代码中肯定存在错误。
答案 1 :(得分:0)
我在Linux上使用Python 3.8.1和SciPy 1.4.1的经历非常相似。一种解决方法是引入np.floor
,以便:
centre = int(window.size / 2)
变为centre = int(np.floor(window.size/2))
似乎已经解决了问题。