Как определить функцию, которая многократно уменьшает половину себя? - PullRequest
0 голосов
/ 12 марта 2020

Я изучаю статистику открытых курсов 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...

Я приложу изображение вопроса. Моя цель - сделать рекурсивную функцию, чтобы легко итерировать.

Я был бы рад, если бы вы могли ответить введите описание изображения здесь

1 Ответ

0 голосов
/ 12 марта 2020

Я не думаю, что вам нужна какая-либо рекурсивная функция. A для l oop может выполнить sh it:

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])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...