У меня есть вопрос, подобный этому один: Weighted random numbers in MATLABНужна альтернатива randsample для вероятностных векторов с 0s в MATLAB
На данный момент, я использую randsample в моей программе следующим образом:
T = [0 .5 .5; .5 0 .5; .5 .5 0]
choices = 1:3
for i = 1:3
t(i) = transpose(randsample(choices,1,true,T(i,:)));
end
Таким образом, t(i)
описывает каждого человека, которого он выберет.
В моей матрице T
, когда читаемый ролик описывает вероятность того, что человек будет выбирать своего соседа. Например, первая строка говорит, что 1-й человек будет выбирать узел 2 или 3 с 50% -ной вероятностью. Они не могут выбрать свой собственный узел 1. Когда я увеличиваю свою модель, у них всегда будет равная вероятность выбора соседа, 1/количество соседей. Я жестко закодировал T-матрицу здесь для краткости.
Я пытался использовать histc
как предложено в связанной теме, но так как всегда есть 0
в каждой строке моей T
матрицы, я не думаю, что накопленная сумма точно устанавливает контейнеры для строк с 0 в средний (здесь второй ряд T
).
Я также попытался использовать bsxfun
, и я смог получить впечатляющий результат при просмотре каждой строки моей матрицы T
в отдельности, но мне не удалось установить ее в цикле. Я чувствую, что решение может быть здесь, но я не уверен, что полностью понимаю, как эта функция работает в моем контексте.
Итак, есть ли у кого-нибудь идеи о том, как я могу ускорить свою функцию randsample? На данный момент я повторяю его 10000x, и поэтому он является основным узким местом в моей программе. Он работает так, как мне нужно, это слишком медленно.
Ваш вопрос кажется мне удобным. Но на всякий случай, это справочники о том, как задавать хорошие вопросы: [ask], http://stackoverflow.com/help/mcve –