给定一个时间序列,我想计算最大亏损,我还想找到最大亏损的起点和终点,这样我就可以计算出持续时间.我想在这样的时间序列图上标记缩编的开始和结束:
一只忙碌的猫http://oi61.tinypic.com/r9h4er.jpg
到目前为止,我已经有了生成随机时间序列的代码,并且我已经有了计算最大亏损的代码.如果有人知道如何确定缩编开始和结束的地方,我真的很感激!
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# create random walk which I want to calculate maximum drawdown for:
T = 50
mu = 0.05
sigma = 0.2
S0 = 20
dt = 0.01
N = round(T/dt)
t = np.linspace(0, T, N)
W = np.random.standard_normal(size = N)
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W
S = S0*np.exp(X) ### geometric brownian motion ###
plt.plot(S)
# Max drawdown …Run Code Online (Sandbox Code Playgroud) 我有一个矩阵1s,并-1s用随机穿插0s:
%// create matrix of 1s and -1s
hypwayt = randn(10,5);
hypwayt(hypwayt > 0) = 1;
hypwayt(hypwayt < 0) = -1;
%// create numz random indices at which to insert 0s (pairs of indices may
%// repeat, so final number of inserted zeros may be < numz)
numz = 15;
a = 1;
b = 10;
r = round((b-a).*rand(numz,1) + a);
s = round((5-1).*rand(numz,1) + a);
for nx = 1:numz
hypwayt(r(nx),s(nx)) = 0
end …Run Code Online (Sandbox Code Playgroud) 我在Matlab中有一个三维数组.第一个维度是时间,第二个维度是湿度,第三个维度是温度.如果温度值<0,我希望每个后续温度值都变为NaN.
例如,如果数组是:
>> sampl = randn(4,3,2)
sampl(:,:,1) =
0.79487 0.71017 -0.39167
0.51754 -1.3068 0.84166
0.49461 0.74159 0.082784
0.66393 1.4677 0.31467
sampl(:,:,2) =
0.78981 1.3096 1.0434
-0.80122 0.16037 -1.0682
-0.32565 -2.1182 -0.31723
0.28468 0.70708 1.4797
Run Code Online (Sandbox Code Playgroud)
将此转化为最有效的方法是什么:
sampl(:,:,1) =
0.79487 0.71017 NaN
0.51754 NaN NaN
0.49461 NaN NaN
0.66393 NaN NaN
sampl(:,:,2) =
0.78981 1.3096 1.0434
NaN 0.16037 NaN
NaN NaN NaN
NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
具体来说,对于特定切片,我们希望沿每列处理,并且一旦我们在一列中遇到负数,我们希望该位置与NaN该NaN值之后的同一列的所有行位置一样也是NaN.
我有一组字符串vals,例如:
vals = {'AD', 'BC'}
Run Code Online (Sandbox Code Playgroud)
我还有一个结构info,其中的结构嵌套在对应于数组中元素的字段中vals(在本例中为'AD'和'BC'),每个结构依次在一个名为的字段中存储一个数字lastcontract.
我可以使用for循环来提取lastcontract每个vals这样的:
for index = 1:length(vals)
info.(vals{index}).lastcontract
end
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想找到一种没有循环的方法,但我没有运气.我试过了:
info.(vals{1:2}).lastcontract
Run Code Online (Sandbox Code Playgroud)
没有成功.我认为arrayfun可能是合适的方式,但我无法弄清楚正确的语法.
我有一个矩阵,其中最右边的元素以降序重复YYYYMMDD日期,例如:
40 1630 1711 20140326
169 700 950 20140326
40 1630 1711 20140326
169 700 950 20140327
40 1630 1711 20140327
169 700 950 20140327
40 1630 1711 20140327
169 700 950 20140328
40 1630 1711 20140328
169 700 950 20140328
40 1630 1711 20140328
3049 700 950 20140331
40 1630 1711 20140331
3049 700 950 20140331
40 1630 1711 20140331
169 700 950 20140401
40 1630 1711 20140401
169 700 950 20140401
40 1630 1711 20140401
169 700 950 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使一些代码更有效,并且想知道如何对此进行矢量化:
%==========================================================================
% MinutesInDayTable.m
%
% Creates a table identifying every minute as an integer from 0 to 2400.
minuteTableInDay=zeros(24*60,1);
k=1;
for i=1:24
for j=1:60
minuteTableInDay(k) = ((i-1)*100+(j-1))*100;
k=k+1;
end
end
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ end of code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud) 我有一个叫做的字符串name.根据以下方案,第三个字符name是表示与哪个月name相关联的字母:
Jan F
Feb G
Mar H
Abr J
May K
Jun M
Jul N
Aug Q
Sep U
Oct V
Nov X
Dec Z
Run Code Online (Sandbox Code Playgroud)
我想重命名name标识的文件,以便使用数字代替任意字母系统:
01
02
...
12
Run Code Online (Sandbox Code Playgroud)
为此,我使用if/elseif以下列方式:
if name(3) == 'F'
monthdesignator = '01';
elseif name(3) == 'G'
monthdesignator = '02';
elseif name(3) == 'H'
monthdesignator = '03';
elseif name(3) == 'J'
monthdesignator = '04';
elseif name(3) == 'K'
monthdesignator = '05';
elseif name(3) == 'M'
monthdesignator = …Run Code Online (Sandbox Code Playgroud) matlab ×6
if-statement ×1
numpy ×1
optimization ×1
python ×1
string ×1
struct ×1
time-series ×1