需要创建一个包含特定元素选择的矩阵
Need to create a matrix with a specific selection of elements
我得到以下信息:
其中 "routenummer" 代表道路编号,"gemeente" 代表城市,"afstand" 代表公里距离,"moeilijkheidsgraad" 代表难度。
我需要创建一个名为 difficultRoads 的矩阵,其中包含难度低于 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
提前致谢!
如果我没理解错的话,你需要这个矩阵的一个子集,其中列出了所有难度小于 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'}.';
完成后,形成一个 table:
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
现在你有了这个,索引到这个 table 而不是:
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
我得到以下信息:
其中 "routenummer" 代表道路编号,"gemeente" 代表城市,"afstand" 代表公里距离,"moeilijkheidsgraad" 代表难度。
我需要创建一个名为 difficultRoads 的矩阵,其中包含难度低于 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
提前致谢!
如果我没理解错的话,你需要这个矩阵的一个子集,其中列出了所有难度小于 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'}.';
完成后,形成一个 table:
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
现在你有了这个,索引到这个 table 而不是:
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