我正在研究MIT开放课程的统计数据。我将附上问题的图片。在一个示例中:我想获得以下值:
[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...
我将附上问题的图片。我的目标是创建一个递归函数以轻松地对其进行迭代。
如果可以回复,请在此处输入图片说明
问题来源:stackoverflow
我认为您不需要任何递归函数。一个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])]
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。