如何解决Cython函数在Kaggle笔记本中返回错误的值
我最近了解了cython,并试图在我的kaggle笔记本上对其进行测试。我在一个单元格中有以下代码:
%%cython
cpdef foo(int x):
cdef bar
bar = x**(x**9)
return bar
print(foo(12))
虽然这应该返回一些怪物数字,但它会返回0,而当我将函数更改为bar = x**(x+1)
时,会出现以下错误:
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-34-6b0330de29c7> in <module>
----> 1 get_ipython().run_cell_magic('cython','','cpdef foo(int x):\n cdef bar\n bar = x**(x+1)\n return bar\nprint(foo(12))\n\n\n\n\n\n')
/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py in run_cell_magic(self,magic_name,line,cell)
2360 with self.builtin_trap:
2361 args = (magic_arg_s,cell)
-> 2362 result = fn(*args,**kwargs)
2363 return result
2364
<decorator-gen-130> in cython(self,cell)
/opt/conda/lib/python3.7/site-packages/IPython/core/magic.py in <lambda>(f,*a,**k)
185 # but it's overkill for just that one bit of state.
186 def magic_deco(arg):
--> 187 call = lambda f,**k: f(*a,**k)
188
189 if callable(arg):
/opt/conda/lib/python3.7/site-packages/Cython/Build/IpythonMagic.py in cython(self,cell)
349 return None
350
--> 351 module = imp.load_dynamic(module_name,module_path)
352 self._import_all(module)
353
/opt/conda/lib/python3.7/imp.py in load_dynamic(name,path,file)
340 spec = importlib.machinery.ModuleSpec(
341 name=name,loader=loader,origin=path)
--> 342 return _load(spec)
343
344 else:
/opt/conda/lib/python3.7/importlib/_bootstrap.py in _load(spec)
/opt/conda/lib/python3.7/importlib/_bootstrap.py in _load_unlocked(spec)
/opt/conda/lib/python3.7/importlib/_bootstrap.py in module_from_spec(spec)
/opt/conda/lib/python3.7/importlib/_bootstrap_external.py in create_module(self,spec)
/opt/conda/lib/python3.7/importlib/_bootstrap.py in _call_with_frames_removed(f,*args,**kwds)
ImportError: /root/.cache/ipython/cython/_cython_magic_b55c72433f8906b1db36ac770a0d81a7.cpython-37m-x86_64-linux-gnu.so: file too short
我尝试删除代码,并将此简化的函数编写到新的单元格中:
%%cython
cpdef some(int x):
return (x**20 + x**9)
print(some(12))
,但这将返回-3162774878951833600
,这是不可能的。我真的很困惑,很抱歉,如果以前曾问过这个问题,但我真的找不到任何与此相关的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。