Это не супер общий, но делает то, что вы хотите.find
возвращает индексы в одномерную версию данных, поэтому нам нужно сделать небольшую арифметику, чтобы получить двумерные версии:
a(a == 1) = floor((find(a == 1) - 1) / size(a, 1)) + 1
Если вы хотите вместо этого использовать индексы строк,Вы могли бы использовать
a(a == 1) = mod(find(a == 1) - 1, size(a, 1)) + 1
Если вы делали это с большой матрицей, вы можете сначала присвоить find(a == 1)
временной переменной:
inds = find(a == 1)
a(inds) = floor((inds - 1) / size(a, 1)) + 1
(Обратите внимание, что индексация вa
со списком индексов или с матрицей логических значений работает одинаково.)
Вы также можете просто использовать find(a)
, если знаете, что исходная матрица содержит только 0 и 1.
Обратите внимание, что это просто делает вручную в основном то, что делает ответ @ tmpearce .