Randomly change the location of 1s on a matrix of 0s (randperm on a matrix}
    조회 수: 2 (최근 30일)
  
       이전 댓글 표시
    
How does one generate a random matrix that satisfies certain properties? Specifically, I'm looking for a code that does this:
Given the matrix below, I want to randomly change the locations of 1s.
1 0 0 
1 0 0
0 0 0
0 0 0
So examples would be
    1 0 0      0 0 0      0 0 1
    0 1 0      0 0 0      0 0 0
    0 0 0      0 1 0      1 0 0
    0 0 0      1 0 0      0 0 0
Well the initial matrix is easy enough.
A = zeros(4,3);
A(1:2,1) = ones(2,1);
But I don't know how to proceed from here. randperm() only generates a vector so doesn't work here. Is there a matlab function that does what randperm does on a matrix?
댓글 수: 0
채택된 답변
  Image Analyst
      
      
 2017년 4월 29일
        Here's one way:
m=[...
1 0 0 
1 0 0
0 0 0
0 0 0]
[rows, columns] = size(m);
ne = numel(m)
numOnes = sum(m(:))
% Generate 10 new versions with 1's in different locations each time.
for k = 1 : 10
  m2 = zeros(size(m)); % Initialize
  m2(randperm(ne, numOnes)) = 1;
  % Turn from vector into 2-D matrix
  m2 = reshape(m2, rows, columns)
end
댓글 수: 0
추가 답변 (1개)
  Star Strider
      
      
 2017년 4월 29일
        See How to place a number in a random position in a matrix of zeros? (link) for one approach. You can create more random 1 values by having the randi function return a vector rather than a single value. See the documentation for the randi function for details.
댓글 수: 0
참고 항목
카테고리
				Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


