Иногда это помогает записать значения первых нескольких циклов, а затем найти шаблон. Вектор F (одна запись на итерацию) начинается с первого f
(назовем его f0
). Затем вторая запись - f0*bins
. Тогда f0*bins^2
и т.д. Так F
является f0*[1 bins bins^2 bins^3]...
и может быть рассчитана как
F = f0 * bins .^ (0:z-1);
так Бункеры^0 равен 1.
Еще до этого, вы были в состоянии вычислить все floor
операцию сразу: floor(clip*bins/256)
. Теперь вам просто нужно выяснить, как умножить вектор P-элементов F на эту трехмерную матрицу MxNxP. bsxfun
будет делать такие вещи, но размеры должны совпадать или быть точными 1. Таким образом, F должен быть 1x1xP вместо P. Затем просто суммируйте все это по 3-му измерению.
binno = sum(bsxfun(@times, floor(clip*bins/256), reshape(F, [1 1 length(F)])), 3);
Просто к сведению ... этот вопрос будет более легко ответить с входами, определенными по крайней мере, по размеру. Еще лучше - это несколько строк, которые генерируют выборочные данные правильных размеров. Поскольку нет ни одного, я не смог бы проверить вышеприведенный код, поэтому ваша ответственность - адаптировать его к вашим данным.
Не могли бы вы положить в некоторых уточнений размера? Я предполагаю, что 'clip' является 3D,' binno' является двумерной матрицей, а 'f' и' bins' являются скалярами? –
@DedekMraz Да, вы правы. Я уточню вопрос. Любые предложения относительно того, как я его вектурирую? – MaxSteel