Как изменить значения нескольких точек в матрице?
У меня есть matrix [500×500]. У меня есть другая matrix, которая [2×100] содержит пары координат, которые могут находиться внутри первой матрицы. Я хотел бы иметь возможность изменять все значения первой матрицы до нуля, без цикла.
mtx = magic(500); co_ords = [30,50,70; 30,50,70]; mtx(co_ords) = 0;
- выделить матрицу в C
- Как искать строку в массиве ячеек в MATLAB?
- Зацикливание по спирали
- Создайте массив свойств целых чисел в Objective C
- Преобразование вращения кватерниона в матрицу вращения?
- Компактная запись индексирования матрицы MATLAB
- Поверните матрицу в R
- Android: как повернуть bitmap по центральной точке
- Различия в использовании функций «const cv :: Mat &», «cv :: Mat &», «cv :: Mat» или «const cv :: Mat» как параметры функции?
- Получить первый столбец матрицы, представленной вектором векторов
- Производительность математических математических библиотек Java?
- Как получить ручки всех открытых фигур в MATLAB
- Как вы объединяете строки матрицы в вектор?
Вы можете сделать это, используя функцию SUB2IND, чтобы преобразовать ваши пары индексов в линейный индекс:
mtx(sub2ind(size(mtx),co_ords(1,:),co_ords(2,:))) = 0;
Другой ответ:
mtx(co_ords(1,:)+(co_ords(2,:)-1)*500)=0;
Я наткнулся на этот вопрос, пока искал аналогичную проблему в 3-D. Я имел индексы строк и столбцов и хотел изменить все значения, соответствующие этим индексам, но на каждой странице (так что все 3-е измерение). В принципе, я хотел выполнить mtx(row(i),col(i),:) = 0;
, но без цикла через строки и столбцы.
Я думал, что поделюсь своим решением здесь вместо того, чтобы задавать новый вопрос, поскольку он тесно связан.
Еще одно отличие заключалось в том, что линейные индексы были доступны мне с самого начала, потому что я определял их с помощью find
. Я включу эту часть для ясности.
mtx = rand(100,100,3); % you guessed it, image data mtx2d = sum(mtx,3); % this is similar to brightness ind = find( mtx2d < 1.5 ); % filter out all pixels below some threshold % now comes the interesting part, the index magic allind = sub2ind([numel(mtx2d),3],repmat(ind,1,3),repmat(1:3,numel(ind),1)); mtx(allind) = 0;