How to replace half the number of specific element in an array?
    6 views (last 30 days)
  
       Show older comments
    
Hello every one,
I have a row vector having 8236 columns, out of which 863 columns have a value 4. I want to replace 431 of the columns by a value 2. For simplicity, I am giving a vector having only 23 columns
A=[1 2 3 4 4 1 2 4 4 3 4 4 4 2 1 3 4 4 4 2 1 4 4]
Here, in this vector, there are 12 columns having a value 4. How to replace half the columns by a value 2?
Any help will be appreciated.
0 Comments
Accepted Answer
  Stephen23
      
      
 on 18 Jun 2018
        
      Edited: Stephen23
      
      
 on 18 Jun 2018
  
      To change random columns:
>> A=[1 2 3 4 4 1 2 4 4 3 4 4 4 2 1 3 4 4 4 2 1 4 4]
A =
   1   2   3   4   4   1   2   4   4   3   4   4   4   2   1   3   4   4   4   2   1   4   4
>> nnz(A==4)
ans =  12
>> idx = find(A==4);
>> num = numel(idx);
>> A(idx(randperm(num,ceil(num/2)))) = 2
A =
   1   2   3   2   2   1   2   4   4   3   2   4   2   2   1   3   2   4   4   2   1   2   4
>> nnz(A==4)
ans =  6
0 Comments
More Answers (2)
  KALYAN ACHARJYA
      
      
 on 18 Jun 2018
        
      Edited: KALYAN ACHARJYA
      
      
 on 18 Jun 2018
  
      A=[1 2 3 4 4 1 2 4 4 3 4 4 4 2 1 3 4 4 4 2 1 4 4];
for i=1:length(A)/2;
 if A(i)==4
    A(i)=2;
    end
end
0 Comments
  Ameer Hamza
      
      
 on 18 Jun 2018
        
      Edited: Ameer Hamza
      
      
 on 18 Jun 2018
  
      Here is one possible solution
A=[1 2 3 4 4 1 2 4 4 3 4 4 4 2 1 3 4 4 4 2 1 4 4];
index = find(A==4);
randomIndex = randperm(length(index));
A(index(randomIndex(1:end/2))) = 2;
it will randomly select which columns to change.
0 Comments
See Also
Categories
				Find more on Matrices and Arrays 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!


