summing logicals i times where i is taken from a matrix of integers
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
Andrei Bobrov
2016년 9월 9일
편집: Andrei Bobrov
2016년 9월 9일
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)
추가 답변 (1개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!