gather data from different sections of each column
    2 次查看(过去 30 天)
  
       显示 更早的评论
    
Consider the code:
 totmods    = 10000;
 numselect = 1000;
 A = rand(100,totmods);        % numbers
 B = randi(90,10,1000);        % start row index
 C = randi(totmods,numselect,1); % column index
 D = A(B:B+9,C);
The resulting matrix D should be the 10x1000 matrix wherein each column is a selection of 10x1 data starting from the index B for each column in A. However, the code does not work correctly. The code uses only B(:,1) as the row index for all the elements gathered from A in the line "D = A(B:B+9,C);"
How can this be corrected without using a loop?
1 个评论
  Guillaume
      
      
 2015-11-18
				
      编辑:Guillaume
      
      
 2015-11-18
  
			The code uses only B(:,1) is slightly incorrect. The code actually only uses B(1, 1) because that's the documented behaviour of the colon operator:
   If you specify nonscalar arrays, MATLAB interprets j:i:k as j(1):i(1):k(1)
I have no idea which values of B (considering it is 10x1000 matrix) you're trying to use for each row of your D output.
采纳的回答
  Thorsten
      
      
 2015-11-18
        You only need numelselect values of rows:
 B = randi(90,numselect,1);
Then use
 for i = 1:numel(B), D(:,i) = A(B(i):B(i)+9, C(i)); end
更多回答(2 个)
  Guillaume
      
      
 2015-11-18
        totmods = 10000;
numselect = 1000;
A = reshape(1:100*totmods, 100, totmods);      
B = randi(size(A, 1) - 9, numselect, 1); %column vector
C = randi(totmods, 1, numselect);  %row vector to make it easier later
rowmatrix = bsxfun(@plus, B, 0:9)'; %matrix of row indices
D = A(sub2ind(size(A), rowmatrix, repmat(C, 10, 1)))
0 个评论
  Stephen23
      
      
 2015-11-18
        
      编辑:Stephen23
      
      
 2015-11-18
  
      Preallocate the output before allocating to it:
As numselect gets larger this will have a very significant effect on the calculation speed. Try something this:
B = randi(90,numselect,1);
D = nan(10,numel(B));
for k = 1:numel(B)
    D(:,k) = A(B(k):B(k)+9, C(k));
end
0 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
			
	产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


