小编Agu*_*guy的帖子

16331239353195370.0有特殊意义吗?

使用import numpy as np我已经注意到了

np.tan(np.pi/2)
Run Code Online (Sandbox Code Playgroud)

给出标题中的数字而不是 np.inf

16331239353195370.0
Run Code Online (Sandbox Code Playgroud)

我很好奇这个号码.它与某些系统机器精度参数有关吗?我能用某些东西计算出来吗?(我正在思考类似的事情sys.float_info)

编辑:相同的结果确实可以在其他环境中重现,如Java,octace,matlab ......但是建议的欺骗并不能解释原因.

python numpy numerical-methods

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

生成器可以递归吗?

我天真地尝试创建一个递归生成器.没工作.这就是我做的:

def recursive_generator(lis):
    yield lis[0]
    recursive_generator(lis[1:])

for k in recursive_generator([6,3,9,1]):
    print(k)
Run Code Online (Sandbox Code Playgroud)

我得到的只是第一项6.

有没有办法使这样的代码工作?基本上yield在递归方案中将命令转移到上面的级别?

python recursion generator

60
推荐指数
3
解决办法
2万
查看次数

包上的`del`有某种记忆

del似乎有一些困扰我的记忆.请参阅以下内容:

In [1]: import math

In [2]: math.cos(0)
Out[2]: 1.0

In [3]: del math.cos

In [4]: math.cos(0)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-9cdcc157d079> in <module>()
----> 1 math.cos(0)

AttributeError: module 'math' has no attribute 'cos'
Run Code Online (Sandbox Code Playgroud)

精细.让我们看看如果删除整个数学包会发生什么:

In [5]: del math

In [6]: math.cos(0)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-9cdcc157d079> in <module>()
----> 1 math.cos(0)

NameError: name 'math' is not defined
Run Code Online (Sandbox Code Playgroud)

所以现在数学本身就像预期的那样消失了.

现在让我们再次导入数学:

In [7]: import math

In [8]: math.cos(0)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call …
Run Code Online (Sandbox Code Playgroud)

python packages ipython del python-3.x

43
推荐指数
3
解决办法
4006
查看次数

为什么“np.inf // 2”导致 NaN 而不是无穷大?

我有点失望,np.inf // 2评估为np.nan而不是np.inf,就像正常除法的情况一样。

有什么原因让我想念为什么nan比 更好的选择inf

python floating-point numpy nan

41
推荐指数
2
解决办法
2961
查看次数

最大递归并不是sys.getrecursionlimit()所声称的.怎么会?

我做了一个实际测量最大递归限制的小函数:

def f(x):
    r = x
    try:
        r = f(x+1)
    except Exception as e:
        print(e)
    finally:
        return r
Run Code Online (Sandbox Code Playgroud)

知道我期待什么我检查过:

In [28]: import sys

In [29]: sys.getrecursionlimit()
Out[29]: 1000
Run Code Online (Sandbox Code Playgroud)

然而

In [30]: f(0)
maximum recursion depth exceeded
Out[30]: 970
Run Code Online (Sandbox Code Playgroud)

数字不固定,总是在~970左右,并且在python的不同实例之间略有变化(例如从spyder到system cmd提示符).

请注意我在python3上使用ipython.

这是怎么回事?为什么实际限制我会低于sys.getrecursionlimit()价值?

python recursion

27
推荐指数
3
解决办法
2277
查看次数

native int类型和numpy.int类型之间有什么区别?

你能帮助理解native int类型和numpy.int32或numpy.int64类型之间的主要区别(如果有的话)是什么?

python numpy

26
推荐指数
3
解决办法
2万
查看次数

0是0 == 0(#evaluates为True?)

这令我感到困惑.即使不知道优先顺序,也可以检查收集表达式的两种可能方法是False:

>>> (0 is 0) == 0
False
>>> 0 is (0 == 0)
False
Run Code Online (Sandbox Code Playgroud)

>>> 0 is 0 == 0
True
Run Code Online (Sandbox Code Playgroud)

怎么会?

python python-3.x

21
推荐指数
2
解决办法
1887
查看次数

列表理解期间的例外情况.中间结果是否保留在何处?

在for循环上下文中使用try-except时,到目前为止执行的命令显然已经完成了

a = [1, 2, 3, 'text', 5]

b = []
try:
    for k in range(len(a)):
        b.append(a[k] + 4)
except:
    print('Error!')
print(b)
Run Code Online (Sandbox Code Playgroud)

结果

Error!
[5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

然而,对于列表推导而言,情况并非如此

c=[]
try:
    c = [a[k] + 4 for k in range(len(a))]
except:
    print('Error!')
print(c)
Run Code Online (Sandbox Code Playgroud)

结果是

Error!
[]
Run Code Online (Sandbox Code Playgroud)

在发生异常之前构建的中间列表是否保留在任何位置?它可以访问吗?

python list-comprehension

18
推荐指数
2
解决办法
911
查看次数

令人惊讶的是1**math.nan和0j**math.nan

我很惊讶

>>> import math
>>> 1**math.nan
1.0
Run Code Online (Sandbox Code Playgroud)

虽然我们也是这样,但也是如此

>>> 0j**math.nan
0j
Run Code Online (Sandbox Code Playgroud)

我没有找到任何其他例子.是否有一个我错过的理由或逻辑使得这个选择成为正确的选择?或者这是一个滑倒?

我在期待nan.至于除了1或之外的其他所有数字0j.

编辑1:感谢jedwards的评论,我有一个参考.但我仍然不明白为什么.为什么这个决定作为标准?另外,找不到参考0j**mat.nan......

编辑2:所以按照下面的答案和其他一些东西,逻辑可能是这样的:任何涉及的计算都nan应该返回,nan除非计算总是返回相同的答案而不管参数.在这种情况下,我们nan作为论据的事实不应该影响结果,我们仍然应该得到固定的答案.

这当然解释1**math.nanmath.nan**0.这也解释了为什么0**math.nannan,而不是0(因为0**n0为所有,但,当n=0它与结果1),并可能被展宽到为什么math.nan*0nan如果我们同意该说法不一定是有限的.

但如果这是现场背后的逻辑,那么0j**math.nan应该是nan,因为0j**n0对所有n除的n=0地方0j**01.所以...确实0j**math.nan有不同的推理?或者是实施中的问题?

python floating-point nan ieee-754

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

复杂的无限 - 有趣的reslts - 一个numpy bug?

我注意到有复杂无穷大的有趣结果.

In [1]: import numpy as np

In [2]: np.isinf(1j * np.inf)
Out[2]: True

In [3]: np.isinf(1 * 1j * np.inf)
Out[3]: True

In [4]: np.isinf(1j * np.inf * 1)
Out[4]: False
Run Code Online (Sandbox Code Playgroud)

这是nan相关的.但最终的结果是奇怪的.

这是一个numpy bug吗?我应该采取哪些不同的做法?

python numpy

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