相关疑难解决方法(0)

是否有可能对NumPy数组进行递归计算,其中每个元素依赖于前一个元素?

T(i) = Tm(i) + (T(i-1)-Tm(i))**(-tau(i))
Run Code Online (Sandbox Code Playgroud)

Tm并且tau是先前已经计算过的具有相同长度的NumPy向量,并且期望创建新向量T.在i它只是为了说明什么是想要的元素索引.

这种情况需要for循环吗?

python numpy vectorization

30
推荐指数
4
解决办法
5532
查看次数

递归:具有分布的帐户值

更新:不确定在没有某种形式的循环的情况下是否可行,但np.where在此处不起作用.如果答案是"你不能",那就这样吧.如果可以,它可以使用来自的东西scipy.signal.


我想在下面的代码中对循环进行矢量化,但由于输出的递归性质,不确定如何.

走我当前的设置:

获取起始金额(100万美元)和季度美元分配(5,000美元):

dist = 5000.
v0 = float(1e6)
Run Code Online (Sandbox Code Playgroud)

在每月频率生成一些随机安全/帐户返回(十进制形式):

r = pd.Series(np.random.rand(12) * .01,
              index=pd.date_range('2017', freq='M', periods=12))
Run Code Online (Sandbox Code Playgroud)

创建一个包含月度帐户值的空系列:

value = pd.Series(np.empty_like(r), index=r.index)
Run Code Online (Sandbox Code Playgroud)

添加"开始月份" value.这个标签将包含v0.

from pandas.tseries import offsets
value = (value.append(Series(v0, index=[value.index[0] - offsets.MonthEnd(1)]))
              .sort_index())
Run Code Online (Sandbox Code Playgroud)

我想摆脱的循环在这里:

for date in value.index[1:]:
    if date.is_quarter_end:
        value.loc[date] = value.loc[date - offsets.MonthEnd(1)] \
                        * (1 + r.loc[date]) - dist
    else:
        value.loc[date] = value.loc[date - offsets.MonthEnd(1)] \
                        * (1 + r.loc[date]) 
Run Code Online (Sandbox Code Playgroud)

合并代码:

import pandas …
Run Code Online (Sandbox Code Playgroud)

python recursion finance python-3.x pandas

15
推荐指数
2
解决办法
411
查看次数

尝试使用numpy对迭代计算进行矢量化

我试图通过在numpy中使用矢量化形式来使一些代码更有效.让我举个例子让你知道我的意思.

给出以下代码:

a = np.zeros([4,4])
a[0] = [1., 2., 3., 4.]
for i in range(len(a)-1):
    a[i+1] = 2*a[i]
print a
Run Code Online (Sandbox Code Playgroud)

它输出

[[  1.   2.   3.   4.]
 [  2.   4.   6.   8.]
 [  4.   8.  12.  16.]
 [  8.  16.  24.  32.]]
Run Code Online (Sandbox Code Playgroud)

当我现在尝试像这样向量化代码:

a = np.zeros([4,4])
a[0] = [1., 2., 3., 4.]
a[1:] = 2*a[0:-1]
print a
Run Code Online (Sandbox Code Playgroud)

我只是让第一次迭代正确:

[[ 1.  2.  3.  4.]
 [ 2.  4.  6.  8.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]
Run Code Online (Sandbox Code Playgroud)

是否有可能以矢量化形式有效地编写上面的代码(下一次迭代总是访问上一次迭代)或者我是否必须保持for循环?

python numpy

7
推荐指数
2
解决办法
965
查看次数

python递归矢量化与时间序列

我有一个时间序列需要递归处理以获得时间序列结果(res).这是我的示例代码:

res=s.copy()*0  
res[1]=k # k is a constant  
for i in range(2,len(s)):  
    res[i]=c1*(s[i]+s[i-1])/2 +c2*res[i-1]+c3*res[i-2]
Run Code Online (Sandbox Code Playgroud)

其中c1,c2,c3是常数.它工作正常,但我想使用矢量化,我试过:

res[2:]=c1*(s[2:]+s[1:-1])/2+c2*res[1:-1]+c3*res[0:-2]  
Run Code Online (Sandbox Code Playgroud)

但我得到"ValueError:
如果我试着, 操作数不能与形状(1016)(1018)一起广播"

res=c1*(s[2:]+s[1:-1])/2+c2*res[1:-1]+c3*res[0:-2]  
Run Code Online (Sandbox Code Playgroud)

没有给出任何错误,但是我得不到正确的结果,因为必须在计算发生之前初始化res [0]和res [1].有没有办法用矢量化处理它?
任何帮助将不胜感激,谢谢!

python recursion numpy time-series vectorization

5
推荐指数
1
解决办法
1574
查看次数