summing logicals i times where i is taken from a matrix of integers
1 view (last 30 days)
Show older comments
I have a matrix of integers R
and some sort of critical value
crit = 0.395
depending on the value of any integer (i) in this matrix I want to generate a second random identically sized matrix of integers containing the sum of i components of the logical
crit >= rand
that is, if i = 0, it would return 0
if i = 1, crit >= rand, it would return either 0 or 1
if i = 2, it would sum crit >= rand + crit >= rand and would return either 0,1 or 2
Thus if R is
R = [1 2 1; 2 3 0; 0 1 0]
it might return
[1 1 0; 2 2 0; 0 0 0]
or
[0 2 1; 1 1 0; 0 1 0]
etc
In reality R is large so I have to avoid loops.
Any help appreciated!
0 Comments
Accepted Answer
Andrei Bobrov
on 9 Sep 2016
Edited: Andrei Bobrov
on 9 Sep 2016
EDIT
crit = 0.395;
z = max(R(:));
n0 = numel(R);
s = size(R);
Lo = crit >= rand([s,z]);
ii = reshape(1:n0,s);
out = arrayfun(@(jj)sum(Lo(jj+(0:R(jj)-1)*n0)),ii);
or just
out = arrayfun(@(ii)sum(rand(ii,1) <= crit),R)
More Answers (1)
See Also
Categories
Find more on Shifting and Sorting Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!