如何定义一个函数,使其自身的数字重复减少一半



我正在学习麻省理工学院开放课程的统计学。我将附上问题的图片。在一个示例中:我想得到以下值:

[1, 0.5, 0.25, 0.125, 0.0625 ...]

我尝试了一种递归的方法来解决这个问题。这就像

import numpy as np
def halfe(x):
return x/2
A = np.array([[.8, .3],
[.2, .7]])
#if I put dot usage of np i get the correct solution for the first iteration
u0 = np.array([1,0])
u1 = A.dot(u0)
print(u1)
[0.8 0.2]
#now the new value will be used to iterate for another value. In an example:
u2 = A.dot(u1)
######### also I made a broken solution for  this ############
def halfer(x):
return x/2
for i in range(0,10):
B = A.dot(halfer(np.array([[1],[0]])))
#but I am completely on a different page...

我将附上问题的图片。我的目标是制作一个递归函数来轻松地迭代它。

我很高兴如果你能回复在这里输入图像描述

我认为您不需要任何递归函数。一个for循环可以完成它:

import numpy as np
A = np.array([[.8, .3], [.2, .7]])
u0 = np.array([1,0])
# Initialize list U to store values of u_i
U=[u0]
N=3
for i in range(N):
U.append(A@U[-1])
print(f'u{i+1} value is {U[-1]}')
u1 value is [0.8 0.2]
u2 value is [0.7 0.3]
u3 value is [0.65 0.35]
U
[array([1, 0]), 
array([0.8, 0.2]),
array([0.7, 0.3]),
array([0.65, 0.35])]

我真的不明白你为什么需要halfer函数。但如果你仍然这样做,你可以使用列表理解来做到这一点:

a=np.array([1,2,3])
[a/2.0**i for i in range(5)]
[array([1., 2., 3.]),
array([0.5, 1. , 1.5]),
array([0.25, 0.5 , 0.75]),
array([0.125, 0.25 , 0.375]),
array([0.0625, 0.125 , 0.1875])]

最新更新