is it possible to get index of reshaped matrix

12 次查看(过去 30 天)
i have a matrix A of size 1*120 and reshaped it to matrix B of size 10*12..... is it possible to get the index values of where the value of A has gone to B in a matrix C of size 1*120....

采纳的回答

Iain
Iain 2014-2-26
The functions ind2sub and sub2ind, give you a more general way of doing it, which expands to more dimensions...
  2 个评论
Elysi Cochin
Elysi Cochin 2014-2-26
if i have a matrix
A = [22 33 44 55 66 77]
and i reshape it to
B = [22 44 66
33 55 77]
i want C = [1 2 1 2 1 2].... how to do it...
Iain
Iain 2014-2-26
编辑:Iain 2014-2-26
temporary = 1:numel(A);
C = mod(temporary ,size(B,1))+1;

请先登录,再进行评论。

更多回答(3 个)

Jos (10584)
Jos (10584) 2014-2-26
A short story of LINEAR vs. SUB indexing:
A = [22 33 44 55 66 77]
B = reshape(A,2,[])
numel(A),numel(B) % the same number of elements
size(A), size(B) % but with different sizes
% However, reshaping does not change the intrinsic order of the elements inside an array.
% This intrinsic order is used by linear indexing:
LinIdx = 3 % any value between 1 and numel(A)
A(LinIdx), B(LinIdx)
% Linear indices correspond to different rows and columns for A and B,
% due to the different shapes between A and B:
LIDX = 1:numel(A) % all linear indices
[rowA, colA] = ind2sub(size(A), LIDX)
[rowB, colB] = ind2sub(size(B), LIDX)
rowB is what you call C

Mischa Kim
Mischa Kim 2014-2-26
编辑:Mischa Kim 2014-2-26
This would do
An = 1:length(A);
nr = 10;
C(:,1) = floor((An-1)/nr) + 1;
C(:,2) = An' - nr*(C(:,1)-1);
where the first and second cols of C are the column and row indices.

Sagar Damle
Sagar Damle 2014-2-27
C and C1,both are one and the same thing.
A = [22 33 44 55 66 77]
B = reshape(A,2,[])
temp = 1:size(B,1)
C = repmat(temp,1,size(B,2))
C1 = kron( ones(1,size(B,2)) , temp )

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by