需要创建一个包含特定元素选择的矩阵

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