How to change values in a 2 dimensional vector at random points

6 views (last 30 days)
Lets say I have n*m matrix. For each row I would pick a random starting point and change the values from that point to the end of the row.
x=ones(n,m);
T=randsample(m,n); %starting points for each row
End=m*ones(size(T)); %ending points for each row
x(:,T:End)=0 %This doesn't work but something like that
Eg:
magic(5);
T=randsample(5,5);
T =
2
3
1
5
4
%Now I want to make every value from T to end in X=0
for i=1:5
x(i,T(i):end)=0
end
Is there a way to vectorize this. If I'm simulating a million trials using a for loop is not very efficient.

Accepted Answer

David Young
David Young on 7 Mar 2012
This might use too much memory, but it's worth a try:
c = meshgrid(1:m, 1:n); % size(x) is [n m], not [m n]
change = bsxfun(@gt, c, T);
x(change) = newVal;

More Answers (0)

Categories

Find more on Creating and Concatenating 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!