Indexing an 6 Dimensional array inside a for loop
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Folks,
I am trying to call in the nth page of a 6D array from page 1 to 6. I am using the following code which is not looping through the 6 pages. nu is a 6D array.
for k=1:6;
for ii=1:size(nu,k);
i=nu(ii);
Calcs{ii}= A.*i ...etc
end
end
I think my ii statement is not correct to index the nth page of 6D array. Any ideas? Thanks in advanced B
2 Kommentare
dpb
am 20 Okt. 2013
No, you're returning the size of the array nu in each dimension in turn.
Unless nu is a cell array, the dimensions in each direction are fixed; Matlab otherwise doesn't support jagged arrays.
The data for a given value of the sixth dimension of a 6D array would be a 5D array and addressed as
d5=nu(:,:,:,:,:,ii); % the ii-th 6th-dimension of 6D array nu
You need to specify precisely which subsection you're intending to operate over.
Antworten (1)
David
am 20 Okt. 2013
Bearbeitet: David
am 20 Okt. 2013
"Folks,
I am trying to call in the nth page of a 6D array from page 1 to 6. I am using the following code which is not looping through the 6 pages. nu is a 6D array.
for k=1:6;
for ii=1:size(nu,k);
i=nu(ii);
Calcs{ii}= A.*i ...etc
end
end
I think my ii statement is not correct to index the nth page of 6D array. Any ideas? Thanks in advanced B"
I assume you are trying to loop through each of the elements along each dimension in the 6D array. If I am correct in my assumption, then I think the problem is as you say. Since nu is a 6D array, you must specify the dimension that is being indexed. In the line you correctly identified as the source of trouble, you are treating nu as if it were only a 1D array. For this to work, you could try reshaping nu into a 2D array, where the elements of each page span their own column. See the code below.
NumDims = ndims(nu);
numPages = size(nu,NumDims);
%Initialize number of elements
numpageElements = 1;
for d=1:NumDims-1
numpageElements = size(nu,d)*numpageElements;
end
%Reshape nu into a N x 6 column matrix.
nunu = reshape(nu,numpageElements,numPages);
and then
%Index through each page
for p=1:6
%Index through the elements on each page
for ii=1:size(:,p)
i = nunu(ii,p);
Calcs{ii} = A.*i ...etc
end
end
You can find more information relevant to your question here: http://www.mathworks.com/help/matlab/math/multidimensional-arrays.html#f1-86846
Siehe auch
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!