如何在Python中将迭代存储到数组中?

时间:2017-11-04 11:48:26

标签: python arrays numpy

我已经定义了以下函数,该函数将x和n作为参数,使用泰勒级数求和来近似arctan。我还在里面嵌入了一个条件语句,因此该函数适用于所有x。 导入数学

import math

for x in range(1,10,1):
   def arctan(x, n):
       arctang=0
       inv_x=1/x
       for i in range(n):
        sign=(-1)**i
        arctang = arctang + ((inv_x**(2.0*i+1))/(2.0*i+1))*sign

       if x>0:
        arc_tan=(math.pi/2)-arctang

       else:
           arc_tan=-(math.pi/2)-arctang

       return arc_tan


   print(arctan(x,100))

此代码打印迭代:

0.7878981009052581

1.1071487177940906

1.2490457723982544

1.3258176636680326

1.3734007669450157

1.4056476493802696

1.4288992721907325

1.446441332248135

1.460139105621001

但是我希望能够将x值存储到数组中,并将这些迭代存储到另一个数组中,这样我就可以从数组中生成一个图形,即: 沿着x = [1,2,3,4,5,6,7,8,9] y = [列出的迭代]

的行

我应该怎么做呢?

谢谢!

3 个答案:

答案 0 :(得分:1)

只需初始化 xmap ymap 的空数组,然后尝试append。示例代码如下所示:

xmap = []
xmap.append(str(x))

同样适用于 y

ymap = []
ymap.append(str(arctan(x,100)))

不要忘记在循环外部初始化xmapymap。如果您希望我修改整个代码,请告诉我。

<强>更新 一维数组中的完整代码。

import math
xmap = []
ymap = []

for x in range(1,10,1):
   def arctan(x, n):
       arctang=0
       inv_x=1/x
       for i in range(n):
        sign=(-1)**i
        arctang = arctang + ((inv_x**(2.0*i+1))/(2.0*i+1))*sign

       if x>0:
        arc_tan=(math.pi/2)-arctang

       else:
           arc_tan=-(math.pi/2)-arctang

       return arc_tan
   xmap.append(str(x))
   ymap.append(str(arctan(x,100)))

x = xmap
y = ymap
print "x= ",x
print "y= ",y

答案 1 :(得分:0)

不要在每次迭代中重新定义函数。这样您就可以使用列表推导来创建&#34;迭代&#34;列表。

M_Gn_Desk

您可以将理解更改为还存储import math def arctan(x, n): arctang = 0 inv_x = 1/x for i in range(n): sign=(-1) ** i arctang = arctang + ((inv_x ** (2.0 * i + 1)) / (2.0 * i+1)) * sign if x>0: arc_tan = (math.pi / 2) - arctang else: arc_tan = -(math.pi / 2) - arctang return arc_tan iterations = [arctan(x, 100) for x in range(1, 10, 1)] 的值,然后x列表的每个元素都将成为元组:

iterations

顺便说一下,iterations = [(x, arctan(x, 100)) for x in range(1, 10, 1)] 已经有numpy函数:numpy.arctan

答案 2 :(得分:0)

为什么不对arctan()本身进行矢量化?

def varctan(x, n):
    inv_x = 1/x

    signs = numpy.empty((len(x), n))
    signs[:, ::2] = 1
    signs[:, 1::2] = -1

    exprange = 2.0 * numpy.arange(n)[None, :] + 1
    signs *= (inv_x[:, None] ** exprange) / (exprange)
    arctang = numpy.sum(signs, axis=1)

    arctang *= -1
    arctang[x > 0] += numpy.pi / 2
    arctang[~x > 0] -= numpy.pi / 2

    return arctang

varctan(numpy.arange(1, 10), 100)