【发布时间】:2019-01-09 08:22:25
【问题描述】:
我有一个数据集time_local,大小为 144x91x8845(经度 x 纬度 x 小时)。我想找到特定时间发生的索引。
data存储数据
time_local 存储数据出现的时间。由于时区差异,并非每张 144x91 面的所有小时都相同
% One year
first = datenum([num2str(years(y)),'-01-01 00:00:00']);
last = datenum([num2str(years(y)),'-12-31 23:00:00']);
dt=1/24;
subset = first:dt:last;
% Find where hour one occurs (want all hours, but starting with 1 hour)
ind = find(time_local == subset(1)); % Hour 1
% Want to save out a new data matrix with the data from hour 1
[a,b,~] = size(time_local);
ind = find(time_local == subset(1)); % Day 1
[x1,y1,z1] = ind2sub(size(time_local),ind);
ind1 = [x1,y1,z1];
data1 = NaN(a,b,length(subset)); % Preallocate new array
data1(:,:,1) = data(ind1(1,:)); % Pull out data where
ind 给了我线性索引,但我想知道下标索引,所以我可以将data1 保存在每个 144x91 面为一小时的地方。目前,ind2sub 似乎没有找到正确的索引,因为从索引中得出的 time_local 不正确。
编辑:我尝试了以下方法,但效果不佳,因为保存的 time_local1 和 data 未正确编入索引,但已接近。不过一定有更有效的方法。
time_local1 = NaN(a,b,length(subset));
data = NaN(a,b,length(subset));
for a1 = 1:length(subset)
if isempty(time_local == subset(a1)) == 0
ind = find(time_local == subset(a1)); % Hour 1
[x1,y1,z1] = ind2sub(size(time_local),ind);
for a2 = 1:length(x1)
time_local1(x1(a2),y1(a2),a1) = time_local(x1(a2),y1(a2),z1(a2));
data(x1(a2),y1(a2),a1) = data1(x1(a2),y1(a2),z1(a2));
end
end
end
【问题讨论】:
-
[x1,y1,z1] = ind2sub(size(time_local),ind);对吗?为什么要调用两次? -
是的。那是一个错字
标签: matlab multidimensional-array indexing