Инструмент для работы с индексами в матрице

У меня есть квадратная матрица с элементами, которые могут принимать значения из {-1, 0, 1}. Я знаю, что в каждой строке есть только 1 элемент, равный -1 (кроме первой строки, где только неотрицательные элементы).

Пусть n будет размером матрицы. Итак, я хочу присвоить каждому индексу i из [2, n] позицию -1 в i-й строке матрицы.

Как я могу сделать это без использования цикла for или while?


person Macaronnos    schedule 10.03.2014    source источник


Ответы (1)


t = matrix==-1;
[~, pos] = max(t,[],2); %// position of first -1 within each row.
pos = pos .* any(t,2); %// give 0 for rows that don't contain any -1 value

pos(k) дает позицию (первого) значения -1 в строке k или 0, если в этой строке нет значения -1.

Пример:

matrix =

     1     0     0     1
     0     1    -1     1
     0     1     1    -1
     0     0     1    -1

дает

pos =

     0
     3
     4
     4
person Luis Mendo    schedule 10.03.2014
comment
@Jigg Поскольку строка 1 в matrix==-1 содержит все нули, поэтому max дает позицию первого 0, а именно 1, что неверно. Во всяком случае, я изменил это на более общий подход. - person Luis Mendo; 10.03.2014