我最近开始学习Python,并且我一直在阅读NumPy官方快速入门指南,其中包含用于迭代的这个示例.
>>> a
array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512,
729])
>>> for i in a:
... print(i**(1/3.))
...
nan
1.0
nan
3.0
nan
5.0
6.0
7.0
8.0
9.0
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是尝试将-1000提高到循环外的(1/3.)的幂,则返回一个值.
>>> -1000**(1/3.)
-9.999999999999998
Run Code Online (Sandbox Code Playgroud)
括号大约-1000,它也返回一个值.
>>> (-1000)**(1/3.)
(5+8.660254037844384j)
Run Code Online (Sandbox Code Playgroud)
为什么nan在for循环中返回相同的操作?我正在使用Python 3.6.3 :: Anaconda自定义(64位).我也尝试了不会向上舍入的不同分数,它也是一样的.使用一个向上舍入到.0的分数它可以工作.
我找不到类似的问题.如果我错过了一些非常明显的东西,请原谅.
编辑: 一些评论提到问题重复NumPy,RuntimeWarning:在电源中遇到无效值 ,这是真的,问题是我没有看到这样的错误.然而,那里的讨论似乎包括一些可能的解决方法.
我正在做Odin项目的课程,现在我必须自己编写一个新#count方法(使用其他名称),其行为类似于Enumerable模块中的常规方法.
有关计数的文档说明如下(http://ruby-doc.org/core-2.4.0/Enumerable.html#method-i-count):
count→int
count(item)→int
count {| obj | block}→int返回
enum通过枚举的项数.如果给出参数,则计算其中的项数enum等于item.如果给出了一个块,它会计算产生真值的元素数量.
我想我可以将所有这些作为单独的方法编写,但我主要想知道一个方法定义是否可以结合count- 使用item和使用块的最后两个用法.当然,我想知道这三个是否可以合并在一个定义中,但我最感兴趣的是最后两个.到目前为止,我似乎找不到可能的答案.
文档页面包含以下示例:
ary = [1, 2, 4, 2]
ary.count #=> 4
ary.count(2) #=> 2
ary.count{ |x| x%2==0 } #=> 3
Run Code Online (Sandbox Code Playgroud)