Что делает этот кусок кода в Matlab - PullRequest
0 голосов
/ 03 марта 2020

Это фрагмент программы, которую я пытаюсь понять. Я изменил имена переменных для облегчения понимания. Я не много занимался кодированием в MatLab, поэтому не могу понять, что происходит. Когда я сохранил a = magi c (4) и получил вывод из этого кода, я подумал, что это сортировка или что-то в этом роде, но с другим входом это не так

a = [14 41 4 16;7 12 45 0;12 12 45 17; 3 2 1 15]
b=a(:)
c=zeros(4,4)

a - 4x4 матрица, b является вектором столбца a, c является матрицей нулей 4X4.

 for kk = 1:length(b)
    c(a==b(kk)) = kk;
end

c =

1    5    9   13
2    7   11   14
7    7   11   15
4    8   12   16

, если я попытаюсь a = magi c (4), где a =

16    2    3   13
 5   11   10    8
 9    7    6   12
 4   14   15    1

, затем c =

1    5    9   13
2    6   10   14
3    7   11   15
4    8   12   16

1 Ответ

0 голосов
/ 03 марта 2020

Ответ в комментариях правильный - возможно, он выполняет функцию внутри программы, однако вне контекста код кажется довольно бессмысленным.

Это, по сути, то, что происходит. Предположим, у вас есть матрица A

A = [3 4; 
     5 6]

Тогда B будет выглядеть следующим образом:

B = [3 4 5 6]

C затем создается путем сравнения kkth-элемента A с kkth-элементом B Если они равны, то kkth элемент C будет kk. Таким образом, в приведенном выше примере C будет выглядеть следующим образом:

C = [1 2; 
     3 4]

Если, как вы выяснили, в вашей исходной матрице A есть несколько записей одного и того же числа, то итоговая матрица C будет иметь индекс только последнего уникального вхождения этого числа. Итак, если

A = [3 3; 
     5 6]

B = [3 3 5 6]

C = [2 2; 
     3 4]

Причина, по которой ваш первый C имеет 7 три раза, в том, что последняя позиция 12 находится в позиции 7. Причина, по которой ваш второй C отличается от вашего первого C потому что A, из которого он сделан, совершенно уникален.

...