gpt4 book ai didi

python - 我怎样才能为 PyPy 获得 numpy 的稳定版本?

转载 作者:行者123 更新时间:2023-11-28 16:35:26 25 4
gpt4 key购买 nike

我已经从链接 https://bitbucket.org/pypy/pypy/downloads/pypy-2.4.0-src.tar.bz2 下载了 PyPy 便携版我已经使用命令为 PyPy 安装了 numpy pip install git+https://bitbucket.org/pypy/numpy.git

安装成功,但我不能像这样使用numpy.min函数。

>>>> numpy.min([1,2,3])    
Traceback (most recent call last):
...
TypeError: expected integer, got NoneType object

所以,我运行了 numpy.test(),结果是

FAILED (KNOWNFAIL=5, SKIP=24, errors=886, failures=152)
<nose.result.TextTestResult run=3367 errors=886 failures=152>

看来是我安装的numpy的不稳定版本。如何获得 PyPy 的稳定版 numpy?

我也试过 pip install numpy(不是 pip install git+https://bitbucket.org/pypy/numpy.git)

但是,我遇到了链接中讨论的另一个问题 PIP Install Numpy throws an error "ascii codec can't decode byte 0xe2"

答案是使用 apt-get 安装 numpy,但是,这个答案只适用于 CPython。 PyPy 有好的解决方案吗?

最佳答案

我刚刚下载了 Pypy 2.4 及其 numpy(通过 git 安装)。看起来 ufunc 功能有错误或不完整。

x = numpy.arange(10)
x.sum() # 45
x.min() # 0
numpy.min(x) # TypeError: expected integer, got NoneType object
numpy.sum(x) # same error

但是如果我给它一个 out 属性,这些 ufunc 版本就可以工作(sortof)

numpy.sum(x, out=1)  # returns 45
numpy.min(x, out=1) # returns 0
numpy.min(x, out=None) # gets the above error

但是在out参数中没有返回值

y = 0
numpy.sum(x, out=y) # returns 45, but does not change y

常规 numpy 会反对 y 不是数组(或维度错误)。


np.min(x)np.core.umath.minimum.reduce(x,None,None,None) 相同,其中 reduce 参数是 (variable, axis, dtype, out)np.core.umath.minimum.reduce(x) 工作正常。

np.core.umath.add.accumulateout 参数方面按预期工作,因此问题似乎与 reduce< 无关.

如果您使用 git clone 安装,您会在您的机器上获得完整的存储库,您可以对其进行探索。该信息也可以在线获得。我仍在尝试找出 ufunc reduce 的定义位置,以及它是否功能齐全。该模块仍处于开发阶段。


http://buildbot.pypy.org/numpy-status/latest.html是一个 numpy 状态表。它引用 pypy/module/micronumpy 目录。我还没弄清楚这与 https://bitbucket.org/pypy/numpy.git 有什么关系?存储库(在下载页面上)。我可以在 micronumpy 树中找到 ufunc.reduce 代码,但在 numpy.git 树中找不到。


core/_methods.py 中,sum 被定义为对 add.reduce 的调用。 minmax 类似。关键字参数变为位置参数。

def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
return um.add.reduce(a, axis, dtype, out, keepdims)

但是看起来这些参数的顺序是错误的。 out 是第 4 个,但是当我直接尝试 add.reduce 时,我必须得到第 6 个。

>>>> x
array([[ 0., 1.],
[ 2., 3.],
[ 4., 5.]])
>>>> y=np.zeros((2,))
>>>> np.add.reduce(x, 0, float, False, False, y)
array([ 6., 9.])
# reduce(a, axis, dtype, ?, keepdims, out)

我顺便看到 micronumpy 树中有一个 commit 处理 reduce 的错误参数顺序。这可能会修复此错误。

在常规 numpy 中,sum 调用是:

um.add.reduce(a, axis=axis, dtype=dtype, out=out, keepdims=keepdims)

效果很好。显然有人试图通过最小化关键字参数来挤出一点性能。

module/micronumpy/ufuncs.pyreduce 定义为:

reduce(self, space, w_obj, w_axis, keepdims=False, out=None, dtype=None,
cumulative=False)

关于python - 我怎样才能为 PyPy 获得 numpy 的稳定版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27033995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com