通过在MATLAB中填入当前值来扩展数组

时间:2014-08-18 17:48:13

标签: matlab

我有一个相当简单的问题,我只是想知道在MATLAB中是否有一种简单的方法(即执行此操作的功能,而不是自己写出循环或其他内容)。

假设我有一个时间序列,其中时间为1:1:1000,数据为2 * (1:1:1000),我希望通过使时间和数据向量更精细来扩展数组。假设我希望时间为1:0.1:1000,数据为2 * (1:0.1:1000)。有没有一种简单的方法可以告诉MATLAB重复每个向量的值10次(来自1 / 0.1 = 10),这样我可以得到类似的东西?:

Time: [1, 2, 3, 4, ...]

Data: [2, 4, 6, 8, ...]

为:

Time: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, ...]

Data: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, ...]

4 个答案:

答案 0 :(得分:2)

您可以使用reshape()repmat()的组合,如下所示:

Data = [2, 4, 6, 8, ...] % As stated in the question. 
Data = reshape(repmat(Data, 10, 1), 1, []);

这比其他kron()sort()repmat()的组合更具时间效率。

进行了两次模拟,结果如下图所示。

首先:模拟时间与Data的长度。在这里,我使用N = 100而不是10。

enter image description here

第二:模拟时间与重复因子。 Data的长度为10000。

enter image description here

因此,您可以根据模拟结果选择最佳的一个。

答案 1 :(得分:1)

正如seb建议的那样,您可以使用函数repmat。我会做什么:

Data = [2, 4, 6, 8, ...];
Data = sort(repmat(Data,1,10));

答案 2 :(得分:1)

您可以使用repmat

interval_size = 10;
Data = 2*(1:1:1000);

out_data = repmat(Data,interval_size,1);
out_data = out_data(:)';

答案 3 :(得分:0)

示例数据:

time=1:50
data=2:2:100
t2=1:.1:50.9

对于时间= 1:n这很简单:

data(:,floor(t2))

如果原始数据有另一个时间刻度,请使用:

[a,b]=ismember(floor(t2),time)
data(:,b)