matlab中的Repmat函数

时间:2015-01-12 14:14:33

标签: matlab matrix

我在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表达式的向量。

希望你能提供帮助。

2 个答案:

答案 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的效果。如果没有,请随时询问。