Indexing an 6 Dimensional array inside a for loop
7 次查看(过去 30 天)
显示 更早的评论
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 个评论
dpb
2013-10-20
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.
回答(1 个)
David
2013-10-20
编辑:David
2013-10-20
"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
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!