我在MatLab中遇到过一系列关于重复功能的问题,但我无法弄清楚这个过程是如何工作的。
我正在尝试将其翻译为R,但我的问题是我不知道该函数如何操纵数据。
代码是制定配对交易策略的过程的一部分,其中代码采用FALSE / TRUE表达式的向量。
代码是:
% initialize positions array
positions=NaN(length(tday), 2);
% long entries
positions(shorts, :)=repmat([-1 1], [length(find(shorts)) 1]);
其中short是TRUE / FALSE表达式的向量。
希望你能提供帮助。
答案 0 :(得分:3)
repmat
重复你给他[dim1 dim2 dim3,...]
次的矩阵。你的代码的作用是:
1 .- length(find(shorts))
:获取shorts
中“真实”的数量。
例如:
shorts=[1 0 0 0 1 0]
length(find(shorts))
ans = 2
2 .- repmat([-1 1], [length(find(shorts)) 1]);
重复[-1 1]
[length(find(shorts)) 1]
次。
继续例如:
repmat([-1 1], [length(find(shorts)) 1]);
ans=[-1 1
-1 1];
3 .- positions(shorts, :)=
将给定的矩阵保存在给定的索引中。 (注意!:仅当shorts
类型为logical
)时才有效。
继续例如:
此时,如果您没有省略任何内容,则位置应为6x2
NaN
矩阵。索引将使用true
矩阵填充shorts
的{{1}}个位置。所以在此之后,职位将是:
[-1 1]
希望有所帮助
答案 1 :(得分:1)
MATLAB repmat
函数复制并平铺数组。语法是
B = repmat(A,n)
其中A
是输入数组,n
指定如何平铺数组。如果n
是向量[n1,n2]
- 就像您的情况一样 - 则A
在行中复制n1
次,在列中复制n2
次。 E.g。
A = [ 1 2 ; 3 4]
B = repmat(A,[2,3])
B = | |
1 2 1 2 1 2
3 4 3 4 3 4 __
1 2 1 2 1 2
3 4 3 4 3 4
(这些行仅用于说明A
如何平铺)
在您的情况下,repmat
为[-1, 1]
的每个非零元素复制向量shorts
。因此,将positions
的每一行(shorts
中的相应条目不为零)设置为[-1,1]
。所有其他行将保留NaN
。
例如,如果
shorts = [1; 0; 1; 1; 0];
然后您的代码将创建
positions =
-1 1
NaN NaN
-1 1
-1 1
NaN NaN
我希望这可以帮助您澄清repmat
的效果。如果没有,请随时询问。