Matlab:如何将2928x1的向量转换为具有特定元素间隔的8784x1向量?

时间:2017-03-20 11:37:07

标签: matlab loops for-loop vector

我正在尝试将具有2928个值的矢量转换为具有8784个值的矢量。第一个向量是一个信息,其间隔为3小时,我想有一个每小时向量,这些值每3小时加一次,剩下的应该用NaN填充。 我的第一种方法是创建一个具有8784个值的NaN向量,但后来我无法创建一个与之配合使用的“for循环”。

为了简单起见,我将尝试用一个例子来解释(n是最小向量的值的数量):

S_3h = ones(n,1); % this acts as the small vector that has only information each 3hours
B_h = nan(3*n,1); %this is the created hourly vector that I want to fulfill

想要的结果是:

B_h = [1 nan nan 1 nan nan 1 nan nan 1 nan nan ...]
你能帮帮我吗? 非常感谢你提前!

3 个答案:

答案 0 :(得分:5)

只需使用不同于1的步骤进行索引。在这种情况下,步骤为3。

B_h(1:3:end) = S_3h

答案 1 :(得分:1)

Zizy Archer's solution很好(也可能是你应该使用的),但下面是另一种选择。

S_3h = ones(n,1);
B_h = nan(3,n); % notice the different indices

B_h(1,:) = S_3h; % the top row contains the non-NaN values. This is common to all methods.
B_h = B_h(:); % reshape to a column vector

做得有点不同:

B_h = reshape( S_3h.' .* [1; NaN(1,2)],[],1);              % R2016b onward
B_h = reshape( bsxfun(@times, S_3h.',[1; NaN(2,1)]),[],1 ); % R2007a onward

如果你有图像处理工具箱,你也可以使用padarray函数,如下所示:

B_h = reshape(padarray(S_3h, [0 2], NaN, 'post').', [], 1);

答案 2 :(得分:1)

已经有两个很好的答案了,所以对于这项运动(以及<canvas id="myCanvas" width="580" height="430"></canvas> ...),这里有一个班轮解决方案:

kron