Есть ли способ получить индекс элемента, на котором действует функция, вызываемая 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
, который можно аргументировать, ссылаясь на местоположение (~ index) текущего элемента в полном объекте (изображение в этом случае):
block_struct.location:
Двухэлементный вектор, [строка col], который указывает положение первого пикселя (минимальная строка, минимальный столбец) блокировать данные во входном изображении.