我收到以下信息:
我需要创建一个名为difficultyRoads的矩阵,其中包含难度低于3的步行道路的所有给定信息。为了制作这个特定的矩阵,我需要使用矩阵路径(我在我的代码中制作并包含原始矩阵没有关于城市的信息)。
n = 0;
nr = [1; 2; 3; 4; 5; 6; 7; 8]
afst = [13; 13; 9.5; 4.5; 11; 12; 16; 8]
gr = [1; 3; 2; 2; 3; 3; 3; 2]
routes = zeros(8, 3);
routes(:,1) = nr;
routes(:,2) = afst;
routes(:,3) = gr;
routes
for r = 1:8
if routes(r,2) > 10
n = n + 1;
end
end
for r = 1:8
sel= (routes(r,3) < 3)
% I have no clue on what to do here, gr(sel)
% doesn't seem to work and I have no idea how
% I could turn it into a matrix aswell with
% only the extra information of the required roads.
end
disp(['The number of roads with a distance bigger than 10 km is ' num2str(n)])
如您所见,我还创建了向量nr,afst,gr和矩阵路径。这是作业的另一部分,可以忽略。
当运行时,应该像这样形成矩阵
1 Merelbeke 13 1
3 Kluisbergen 9.5 2
4 Kruishoutem 4.5 2
8 Oudenaarde 8 2
提前致谢!
答案 0 :(得分:1)
如果我理解正确,你需要这个矩阵的一个子集,它列出了所有难度小于3的道路。可以简单地通过以下方式完成:
difficultRoads = routes(routes(:,3) < 3, :);
顺便说一句,如果我可以用您的代码发表一条评论,您只需执行以下操作即可创建该矩阵:
nr = [1; 2; 3; 4; 5; 6; 7; 8]
afst = [13; 13; 9.5; 4.5; 11; 12; 16; 8]
gr = [1; 3; 2; 2; 3; 3; 3; 2]
routes = [nr afst gt];
此处无需预先分配并自行填充每列。只需通过水平堆叠列来创建矩阵。
回到原来的问题,这会使用所谓的logical indexing。基本上,我们会查看routes
的最后一列,并确定所有小于3的难度。这由routes(:,3) < 3
完成。这会产生一个逻辑矩阵,其中true / 1
满足条件而false / 0
不满足条件。然后,您将使用此矩阵访问矩阵routes
的行,并提取满足条件的行,从而获得该结果。
但是,你所写的只是数字数据。你也想展示城市。
我们可以创建table
结构来帮助我们实现这一目标,但首先,您需要定义尚未完成的城市。
%// Your data + the cities
nr = [1; 2; 3; 4; 5; 6; 7; 8]
afst = [13; 13; 9.5; 4.5; 11; 12; 16; 8]
gr = [1; 3; 2; 2; 3; 3; 3; 2]
routes = [nr afst gt];
cities = {'Merelbeke', 'Oudenaarde', 'Kluisbergen', 'Kruishoutem', 'Maarkedal', 'Maarkdeal', 'Luisbergen', 'Oudernaarde'}.';
一旦你这样做,就形成一张桌子:
T = table(nr, cities, afst, gr, 'VariableNames', {'Routenummer', 'Gemeente', 'Afstand', 'Moeilijkheidsgraad'});
请注意,我也给每一列都有自己的名字,因为如果你不这样做,它只是默认调用变量名称。
我们得到:
T =
Routenummer Gemeente Afstand Moeilijkheidsgraad
___________ _____________ _______ __________________
1 'Merelbeke' 13 1
2 'Oudenaarde' 13 3
3 'Kluisbergen' 9.5 2
4 'Kruishoutem' 4.5 2
5 'Maarkedal' 11 3
6 'Maarkdeal' 12 3
7 'Luisbergen' 16 3
8 'Oudernaarde' 8 2
现在您已经拥有了这个,请转而使用此表:
difficultRoads = T(routes(:,3) < 3, :);
我们得到:
difficultRoads =
Routenummer Gemeente Afstand Moeilijkheidsgraad
___________ _____________ _______ __________________
1 'Merelbeke' 13 1
3 'Kluisbergen' 9.5 2
4 'Kruishoutem' 4.5 2
8 'Oudernaarde' 8 2