MATLAB Answers

Indexing a 3D matrix with a 2D matrix

조회 수: 3(최근 30일)
NICHOLAS CIMASZEWSKI
NICHOLAS CIMASZEWSKI 2020년 12월 25일
편집: Catalytic 2020년 12월 25일
I have a 3D matrix of all zeros, L, of size G_ by H by N.
temp is a 3D matrix of all possible length G binary words which sum to less than gamma, replicated N times. Therefore temp is of size G_ by G by N (where technically G_ is 2^G minus GchooseG minus Gchoose(G-1) minus...Gchoose(gamma+1), but this should be unimportant to our application).
temp = dec2bin(0:2^G-1)-'0'; % (2^G, G)
temp((sum(temp,2)>gamma),:) = []; % (G_, G)
temp = repmat(temp,1,1,N); % % (G_, G, N)
L = zeros(size(temp,1),H,size(temp,3)); % (G_, H, N)
units is a matrix of size G by N. I want to use units to determine which columns of L to change from 0s. This worked well for N=1, but I'm trying to vectorize this to work across multiple datapoints. I tried the following:
L(:,units) = temp;
But L(:,units) collapses down to size (G_, G*N) instead of (G_,G,N), and so there is a size mismatch.
I want L to equal an array which is N slices, where in the i-th slice (out of N), the G columns specificed by the i-th column (out of N) in units is assigned to the i-th slice (out of N) of temp.
This may be confusing – can anybody help me? I feel like there should be a vectorizable solution but I can't find one.
  댓글 수: 2
Stephen Cobeldick
Stephen Cobeldick 2020년 12월 25일
You will probably need to convert to linear indices using

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

답변(1개)

Catalytic
Catalytic 2020년 12월 25일
편집: Catalytic 2020년 12월 25일
units=sub2ind([G,N],units,repmat(1:N,G,1) );
L(:,units)=temp(:,:);

Community Treasure Hunt

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

Start Hunting!

Translated by