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,:)

채택된 답변

Stephen23
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
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
Mantas Vaitonis
Mantas Vaitonis 2018년 7월 4일
Yes this is exactly what I need, thank you.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by