How can I access the elements of one array with another array?

조회 수: 1 (최근 30일)
Ryan Potter
Ryan Potter 2018년 12월 11일
편집: Stephen23 2018년 12월 11일
I'd like to assign elements to an array in the following manner:
a = zeros(2,2,2);
ix=1;
iy=1;
b = [1,1];
a([ix,iy],:) = b(:)
Where ix and iy represent the position in the 1st and 2nd directions, a in it's 3rd dimension and b are the same length length. For my application ix and iy really need to be in the same array and the method needs to be applicable to N-dimensions. Is there a way to do such an assignment?

채택된 답변

Stephen23
Stephen23 2018년 12월 11일
편집: Stephen23 2018년 12월 11일
This is really very easy once you put those indices into a cell array:
C = {ix,iy,...,iN,':'};
a(C{:}) = b
Given a numeric vector of indices V:
V = [ix,iy,...,iN];
C = num2cell(V);
a(C{:},':') = b;
or
a(C{:},:) = b;

추가 답변 (2개)

KSSV
KSSV 2018년 12월 11일
a = zeros(2,2,2);
ix=1;
iy=1;
b = [1,1];
a(ix,iy,:) = b
  댓글 수: 1
Ryan Potter
Ryan Potter 2018년 12월 11일
Sorry, but I would like to be able to extend this to N-dimensions without writing:
a(ix,iy,...,iN,:) = b
The indices [ix,iy,...,iN] are generated programmatically the length varies.

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


Guillaume
Guillaume 2018년 12월 11일
I'm going to assume that [ix, iy] is a 2D array, not a vector as in your example, otherwise your problem is trivially solved with:
indices = [ix, iy];
a(indices(1), indices(2), :) = b(:);
If it's a vector, you will have to convert your Nd subscripts into linear indices with sub2ind. Unfortunately, that means you can't use the colon operator. You have to explicitly list the dimensions.
a = zeros(2, 2, 2);
indices = [1 1;1 2;2 1];
b = [1 2; 3 4; 5 6] %shape of b doesn't matter
linindices = sub2ind(size(a), repmat(indices(:, 1), 1, size(a, 3)), repmat(indices(:, 2), 1, size(a, 3)), repmat(1:size(a, 3), size(indices, 1), 1))
a(linindices) = b
  댓글 수: 2
Ryan Potter
Ryan Potter 2018년 12월 11일
[ix, iy] is a vector, but the size of 'a' varies programmatically as do the indices so the vector could look like indices [ix,iy,...,iN]. And I'd like to assign values as follows
a(ix,iy,...,iN,:) = b
I'll investigate linear indices in the meantime.
Guillaume
Guillaume 2018년 12월 11일
편집: Guillaume 2018년 12월 11일
Ah ok, In that case, see Stephen's answer

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

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

태그

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by