Есть ли способ получить индекс элемента, для которого функция вызывается из cellfun
, arrayfun
или spfun
действует? (т.е. получить индекс элемента в рамках функции).
Для простоты представьте, что у меня есть следующий игрушечный пример:
S = spdiags([1:4]',0,4,4)
f = spfun(@(x) 2*x,S)
, который строит разреженную диагональную матрицу 4x4, а затем умножает каждый элемент на 2
.
И скажите, что теперь, вместо умножения каждого элемента на постоянное число 2
, я хотел бы умножить его на индекс, который элемент имеет в исходной матрице , т.е.если предположить, что linear_index
содержит индекс для каждого элемента, это будет примерно так:
S = spdiags([1:4]',0,4,4)
f = spfun(@(x) linear_index*x,S)
Однако обратите внимание, что приведенный выше код не работает ( linear_index
не объявлен).
Этот вопрос частично мотивирован тем фактом, что blocproc
дает вам доступ к block_struct.location
, который, как можно утверждать, ссылается на местоположение (~ индекс) текущего элемент в полном объекте (изображение в данном случае):
block_struct.location:
Двухэлементный вектор [row col], который определяет положение первого пикселя (минимальная строка, минимальный столбец) данных блока во входном изображении.