开发者社区> 问答> 正文

如何定义一个功能,使其反复减少一半的数量?

我正在研究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

展开
收起
is大龙 2020-03-24 00:08:01 423 0
1 条回答
写回答
取消 提交回答
  • 我认为您不需要任何递归函数。一个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

    2020-03-24 00:08:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据带来无限可能 立即下载
用计算和数据去改变整个世界 立即下载
动态、高效,蚂蚁动态卡片的内核逻辑 立即下载