What would be the way to use one 3D array as index for other 3D array?
    조회 수: 2 (최근 30일)
  
       이전 댓글 표시
    
Hello, I have two 3D arrays a (3x5x4) and o (1x5x4). What I would like to achieve is to use o array as index for a. The struggle is when I use the function below it would take whole o array when creating new array x (1x5x4), maybe anyone has any idea. I thought about pagefun, but it works with only predefined functions.
a=rand(3,5,4)
o= cat(3,[2 5 1 2 4],[2 5 3 1 5],[2 2 2 4 4],[2 3 1 5 4])
x=a(2,o,:)
댓글 수: 0
채택된 답변
  Stephen23
      
      
 2018년 7월 4일
        The simplest solution is to use a temporary variable:
>> tmp = a(2,:,:);
>> x = tmp(o)
Another option would be to convert the subscript indices into linear indices, but this is not so trivial.
댓글 수: 5
  Stephen23
      
      
 2018년 7월 4일
				
      편집: Stephen23
      
      
 2018년 7월 4일
  
			@Mantas Vaitonis: convert the subscript indices into linear indices:
>> a = rand(3,5,4)
a =
ans(:,:,1) =
   0.619297   0.782286   0.293458   0.489529   0.063580
   0.727413   0.462825   0.712196   0.129529   0.010375
   0.535980   0.625046   0.098377   0.589341   0.623387
ans(:,:,2) =
   0.532375   0.927982   0.581526   0.094430   0.486161
   0.931640   0.580941   0.182186   0.314561   0.209293
   0.826359   0.040024   0.528289   0.704205   0.360965
ans(:,:,3) =
   0.225279   0.708014   0.587027   0.020373   0.792127
   0.573342   0.530581   0.896023   0.556469   0.471478
   0.795015   0.122115   0.109518   0.890492   0.351620
ans(:,:,4) =
   0.082299   0.173384   0.587164   0.179035   0.244157
   0.527470   0.635292   0.400517   0.953553   0.631803
   0.886819   0.880137   0.526968   0.197963   0.232092
>> o = cat(3,[2,5,1,2,4],[2,5,5,3,4],[3,5,4,2,4],[2,1,1,1,4]);
>> S = size(a);
>> [R,~,P] = ndgrid(2,1:S(2),1:S(3)); % 1st input 2 -> row.
>> x = a(sub2ind(S,R,o,P))
x =
ans(:,:,1) =
   0.462825   0.010375   0.727413   0.462825   0.129529
ans(:,:,2) =
   0.580941   0.209293   0.209293   0.182196   0.314561
ans(:,:,3) =
   0.896023   0.471478   0.556469   0.530581   0.556469
ans(:,:,4) =
   0.635292   0.527470   0.527470   0.527470   0.953553
추가 답변 (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!

