我有一个相当简单的问题,我只是想知道在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, ...]
答案 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。
第二:模拟时间与重复因子。 Data
的长度为10000。
因此,您可以根据模拟结果选择最佳的一个。
答案 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)