生成包含前n个z_n值的N个元素的数组

时间:2017-09-20 12:59:25

标签: python arrays python-3.x numpy

我获得了以下任务:

  

编写一个可以生成包含N个元素的数组的函数。这些值在数学上定义为:

     

z_n = alpha(1 + sqrt {3})^ n + beta(1-sqrt {3})^ n所有n> = 1

     

元素数量和两个实数alpha和beta作为输入。输出应该是具有前n个值的向量。

这段代码,我必须完成:

def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
    return

这是我能够提出的:

def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
    z_n = np.empty((N, 1))
    N = 10
    n = 1
    for alpha in range(1, N):
        z_n[n] = alpha*(1+sqrt(3))^n + beta*(1-sqrt(3))^n
        n += 1
    return z_n 

有人可以帮助我做对吗?

1 个答案:

答案 0 :(得分:0)

问题^按位xor操作,而不是电源。在这种情况下,您可以使用**。此外,您alpha循环中分配给for

所以你可以解决它:

def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
    result = np.empty((N, 1))
    for n in range(1, N+1):
        result[n-1] = alpha*(1+sqrt(3))**n + beta*(1-sqrt(3))**n
    return result

尽管如此,您可以先生成arange,然后使用广播,使其更具说明性:

def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
    result = np.arange(1,N+1)
    return alpha*(1+sqrt(3))**result + beta*(1-sqrt(3))**result

对于alpha=0.5beta=0.25的10个元素,我们得到:

>>> make_sequence(10,0.5,0.25)
array([  1.18301270e+00,   3.86602540e+00,   1.00980762e+01,
         2.79282032e+01,   7.60525589e+01,   2.07961524e+02,
         5.68028166e+02,   1.55197938e+03,   4.24001509e+03,
         1.15839890e+04])