我有一个包含1200000行和18列的矩阵。它是交通数据,每一行都是唯一的,第一列是“车辆ID”,第二列是“车架ID”,第16列是“前车ID”。我希望MATLAB从同一帧ID中的整个数据中找到前方车辆的行向量,并将其放在另一个称为PV的矩阵中。如果前方没有车,则放置零矢量。整个矩阵称为“H1”。我使用下面的代码和我使用的工作百分比。但是,它的运行时太慢,16GB内存需要超过14个小时。这对我来说太长了,因为我还有其他10个这样的数据。请帮我把它变得更快更好。
提前致谢。
for i=1:1200000
i*100/m % Shows what percent of the work done
g = H1(H1(:,1)==H1(i,16),:);
g = g(g(:,2)==H1(i,2),:);
if isempty(g)==1
PV(i,:) = zero(1,:);
else
PV(i,[1:17])=g(1,[1:17]);
end
end
编辑:数据就像一本有10000页的书。每个页面是一个帧ID(页码是帧ID),其中有许多车辆,具有唯一的车辆ID。因此,任何页面都会显示从上方拍摄的图像,此图像中有许多车辆。如果我们将图像以0.1秒的时间间隔连在一起,我们就得到了车辆的驱动胶片。该数据包括车辆的x和y坐标,每个车架可以使用MATLAB中的“plot”命令进行描绘。该数据还包括前车(主车辆前方的车辆),其ID在每排的第16列中。值得注意的是,所有车辆的信息都存在于数据中。如果在主车辆前面没有车辆,则第16列中的数字为零。所以任何一行都只显示一辆车的信息。数据按帧ID排序。
现在我需要从整个矩阵中提取前车的行并将其放在 PV 的矩阵中。问题是当百分比达到约5%时百分比变慢。以下是数据样本:
[629 2033...581]
第一列是车辆ID,第二列是帧ID,第16列是该帧ID中的前车ID。这里车号581位于车架编号629中,车架编号为2033.现在我需要在车架2033中提取车辆ID 581的数据并将其放入PV矩阵中。
更多样本:第一个是车辆ID,第二个是车架ID,第三个是前面的车辆ID。
[629 2033 688 1113433338200 28.703 462.09 6042802.932 2133529.776 56.3 7.9 3 12.8 5.09 3 581 640 95.39]
[577 2033 465 1113433338200 79.392 618.232 6042833.946 2133691.06 17.3 8.4 2 30.19 -0.37 7 0 3362 0]
[580 2033 621 1113433338200 53.4 542.455 6042817.601 2133612.708 18.3 7.5 2 20.49 -0.09 5 572 3361 80.9]
[581 2033 565 1113433338200 27.252 557.481 6042789.779 2133624.359 16.8 7.4 2 21.25 4.19 3 573 629 62.54]
对不起,我会提前解释并感谢您的帮助。
答案 0 :(得分:2)
在别人的帮助下,我找到了答案:
我们首先需要将每个帧ID提取到一个单元格数组中,然后为每个帧应用代码。
N = max(H1(:,2));
for i=1:N
display('first')
i*100/N
F{i} = H1(H1(:,2)==i,:);
end
F = F(~cellfun(@isempty, F));
此代码划分帧。然后应用:
for j=1:10000
m = size(F{1,j},1);
for i=1:m
i*100/m % Shows what percent of the work done
g = F{1,j}(F{1,j}(:,1)==F{1,j}(i,16),:);
if isempty(g)==1
F{1,j}(i,[18:34]) = zero(1,:); % Preceding vehicle
else
F{1,j}(i,[18:34]) = g(1,[1:17]);
end
end
end
感谢您的帮助。 @hypfco和@ m7913d