Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么numpy.arange()和range()生成的相同数字的(复杂)函数不同? 可复制设置_Python_Python 3.x_Numpy_List Comprehension_Fibonacci - Fatal编程技术网

Python 为什么numpy.arange()和range()生成的相同数字的(复杂)函数不同? 可复制设置

Python 为什么numpy.arange()和range()生成的相同数字的(复杂)函数不同? 可复制设置,python,python-3.x,numpy,list-comprehension,fibonacci,Python,Python 3.x,Numpy,List Comprehension,Fibonacci,比奈公式如下所示: 让我们用python定义此函数: # necessary imports import numpy as np import matplotlib.pyplot as plt 对于phi值,我使用了 什么有效 让我们计算n=[0.1,0.2,0.3,0.4,0.5,…,4.9,5.0]的binet(n): def binet(n): phi = (1 + 5 ** 0.5) / 2 return ((phi**n) - (-1/phi)**n) / (5

比奈公式如下所示:

让我们用python定义此函数:

# necessary imports
import numpy as np
import matplotlib.pyplot as plt
对于
phi
值,我使用了


什么有效 让我们计算
n=[0.1,0.2,0.3,0.4,0.5,…,4.9,5.0]的
binet(n)

def binet(n):
    phi = (1 + 5 ** 0.5) / 2
    return ((phi**n) - (-1/phi)**n) / (5**0.5)
让我们来描绘它:

[binet(x/10) for x in range(1,51)]

看起来不错,阿格里斯和我们的数学知识


什么不起作用 基于上述情况,我相信这也会起作用:

# our results
plt.plot([n.real for n in binetn],[n.imag for n in binetn])
# classic fibonacci numbers
plt.scatter([1,1,3,5],[0,0,0,0],c='r')
然而,事实并非如此<代码>binetn
变为:

binetn=[binet(x) for x in np.arange(0.1,5.1,0.1)]
即它是
nan
除非
binet(n)
是实的

它还发出警告:

/usr/local/lib/python3.6/dist-packages/ipykernel_-launcher.py:2: RuntimeWarning:在双\u标量中遇到无效值


问题:
为什么我可以循环通过
range()
&生成的数字列表来获得复杂的结果,而我不能对
np.arange()
执行同样的操作?
副本集中在
np.arange
上。但这不是问题所在

比较向
binet
传递浮点值与向
np.float64
传递浮点值:

[nan,nan,nan,nan,nan,nan,nan,nan,nan,1.0,...,nan,nan,5.000000000000001]
或者这些迭代:

In [52]: binet(0.1)                                                                                  
Out[52]: (0.06391735396852471-0.13170388861716523j)
In [53]: binet(np.float64(0.1))                                                                      
/usr/local/bin/ipython3:3: RuntimeWarning: invalid value encountered in double_scalars
  # -*- coding: utf-8 -*-
Out[53]: nan
进一步挖掘,它似乎与
复杂的
有关。如果
numpy
参数复杂,则计算正常:

In [54]: [binet(float(x)) for x in np.arange(0.1, 5.1, 0.1)];                                        
In [55]: [binet(x) for x in np.arange(0.1, 5.1, 0.1).tolist()];                                      
In [56]: [binet(x) for x in np.arange(0.1, 5.1, 0.1)];                                               
/usr/local/bin/ipython3:3: RuntimeWarning: invalid value encountered in double_scalars
  # -*- coding: utf-8 -*-
事实上,我们不需要迭代。一个复杂的数组工作得很好:

In [58]: binet(np.complex(.1))                                                                       
Out[58]: (0.06391735396852471-0.13170388861716523j)
In [59]: [binet(x) for x in np.arange(0.1, 5.1, 0.1).astype(complex)]; 

比较
[范围(1,51)内x的打印(x/10)]
[np.arange(0.1,5.1,0.1)中x的打印(x)]
。你很快就会明白为什么。不确定这是什么原因,一些浮虫。谢谢!这些都是有用的。
In [60]: x = np.arange(0.1, 5.1, 0.1).astype(complex)                                                
In [61]: binet(x)                                                                                    
Out[61]: 
array([0.06391735-1.31703889e-01j, 0.16378803-2.38746028e-01j,
       0.28913834-3.13167258e-01j, 0.42813892-3.50853867e-01j,
       0.56886448-3.51577584e-01j, 0.70044744-3.18660871e-01j,
       0.81402504-2.58333837e-01j, 0.9034083 -1.78872498e-01j,
       ...
       4.32034432-3.76903988e-02j, 4.54051382-2.60971457e-02j,
       4.76690299-1.30754885e-02j, 5.        +0.00000000e+00j])