1

私は次の情報を与えられています:

情報が与えられた行列

"routenummer" は道路番号、"gemeente" は都市、"afstand" は距離 (km)、"moeilijkheidsgraad" は難易度を表します。

難易度が 3 未満の徒歩道路のすべての情報を含む、hardRoads というタイトルのマトリックスを作成する必要があります。この特定のマトリックスを作成するには、マトリックス ルートを使用する必要があります (コードで作成し、元の都市に関する情報を含まないマトリックス)。

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

前もって感謝します!

4

1 に答える 1

1

私の理解が正しければ、難易度が 3 未満のすべての道路をリストしたこのマトリックスのサブセットが必要です。これは、次の方法で簡単に実行できます。

difficultRoads = routes(routes(:,3) < 3, :);

ところで、あなたのコードに 1 つのコメントを付けることができれば、次のようにしてそのマトリックスを作成できます。

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と呼ばれるものを使用します。基本的に、 の最後の列を見て、routes3 未満の難易度をすべて決定します。これは によって行われ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  
于 2015-10-28T16:40:53.917 に答える