summing logicals i times where i is taken from a matrix of integers
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposta accettata
Andrei Bobrov
il 9 Set 2016
Modificato: Andrei Bobrov
il 9 Set 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)
Più risposte (1)
Vedere anche
Categorie
Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!