Matlab: Как заменить некоторые элементы матрицы A на другие значения A в обоих направлениях?

Вопрос:для матрицы A (10x100000), содержащей числа от 1 до 100, как заменить некоторые элементы A на другие значения A в обоих направлениях? пример: заменить номера [5 7 9 18 55 4] на [47 78 41 1 99 98] и [47 78 41 1 99 98] на [5 7 9 18 55 4] Ответ №1Используйте два

Вопрос:

для матрицы A (10×100000), содержащей числа от 1 до 100, как заменить некоторые элементы A на другие значения A в обоих направлениях?

пример:

заменить номера [5 7 9 18 55 4] на [47 78 41 1 99 98] и [47 78 41 1 99 98] на [5 7 9 18 55 4]

Ответ №1

Используйте два выхода ismember:

n1 = [1 2 3]; %// first set of numbers n2 = [4 5 6]; %// second set of numbers [v1, i1] = ismember(A,n1); [v2, i2] = ismember(A,n2); A(v1) = n2(i1(v1)); A(v2) = n1(i2(v2));

Пример:

>> A = randi(8,4,5) A = 2 2 8 4 6 2 5 3 8 2 5 4 3 2 5 4 3 2 3 4

преобразуется в

A = 5 5 8 1 3 5 2 6 8 5 2 1 6 5 2 1 6 5 6 1 Ответ №2

bsxfun

%// Input matrix A = randi(100,10,10) vec1 = [5 7 9 18 55 4 , 47 78 41 1 99 98]; %// Numbers to be replaced vec2 = [47 78 4 1 99 98, 5 7 9 18 55 4]; %// Numbers to be used as replacements [v1,v2] = max(bsxfun(@eq,A(:),vec1),[],2); A(find(v1)) = vec2(v2(v1))

Пример прогона –

Вход A

A = 27 37 27 59 37 13 55 45 29 16 84 41 58 46 75 39 75 51 49 16 100 37 88 87 71 82 85 54 69 16 65 47 7 67 71 99 17 86 21 9 71 51 45 36 1 87 91 68 61 46 94 92 9 35 38 9 11 81 33 67 69 21 57 26 91 34 75 54 89 84 57 34 54 96 32 24 73 96 14 80 39 58 77 30 60 32 72 7 11 72 64 49 24 16 30 99 14 55 96 48

Выход A

A = 27 37 27 59 37 13 99 45 29 16 84 9 58 46 75 39 75 51 49 16 100 37 88 87 71 82 85 54 69 16 65 5 78 67 71 55 17 86 21 4 71 51 45 36 18 87 91 68 61 46 94 92 4 35 38 4 11 81 33 67 69 21 57 26 91 34 75 54 89 84 57 34 54 96 32 24 73 96 14 80 39 58 77 30 60 32 72 78 11 72 64 49 24 16 30 55 14 99 96 48

Как можно видеть, 7s из (4,3) и (9,8) в оригинале A заменяются на 78s и 47 в (4,2) на 5.

Ответ №3

Матлаб – странное и загадочное место. При поиске в документации я нашел функцию, называемую changem в панели инструментов “Сопоставление”. Я никогда не использовал его, но, видимо, если у вас есть исходная матрица A и два вектора подстановки v1 and v2:

v1 = [ 5 7 9 18 55 4]; v2 = [47 78 41 1 99 98];

Все, что вам нужно сделать, это:

B = changem(A, [v1 v2], [v2 v1]);

Оцените статью
Добавить комментарий