Как умножить матрицу на скалярное значение в MATLAB при условии

В Matlab у меня есть матрица со случайными числами от 0 до 100. Все числа ниже 10 должны быть умножены на два.

testmatrix = [1,2;11,90] должно превратиться в [2,4;11,90]

Выполнение условных операций над матрицей достаточно просто, но как мне сослаться на текущий элемент с правой стороны?

тестовая матрица (тестовая матрица‹10) = ???*2


person ASA    schedule 22.04.2013    source источник


Ответы (3)


Точно так же, как и в левой части:

testmatrix(testmatrix<10) = testmatrix(testmatrix<10)*2

Или, как указывает Amro, вы можете сэкономить на вычислениях, создав многоразовую маску логического индексирования:

idx = testmatrix < 10
testmatrix(idx) = testmatrix(idx)*2

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

person Dan    schedule 22.04.2013
comment
@ user2306536: вы также можете сохранить маску логического индексирования в переменной для повторного использования: idx = (testmatrix<10);, затем testmatrix(idx)=testmatrix(idx)*2; - person Amro; 22.04.2013

Что вам нужно:

testmatrix(testmatrix < 10) = testmatrix(testmatrix < 10)*2;
person Roney Michael    schedule 22.04.2013
comment
@ user2306536: Вероятно, вам следует принять ответ Дэна. Это то же самое, и это немного старше. - person Roney Michael; 22.04.2013
comment
Ты прав. Я выбираю ответ Рони, потому что он появился сверху с самого начала, поэтому я подумал, что он был первым. - person ASA; 22.04.2013
comment
Меня это не смущает - они были в основном в одно и то же время. - person Dan; 22.04.2013

Как насчет этого:

А = ранди (100,1000,1);

конд = А ‹= 10;

тест = A(конд.).*2

person fpe    schedule 22.04.2013