我正在尝试将具有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 ...]
你能帮帮我吗?
非常感谢你提前!
答案 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