Borrar filtros
Borrar filtros

Convert subscripts to linear indices with dynamic matrix size

5 visualizaciones (últimos 30 días)
Hi all,
I have a matrix with a dynamic size, e.g. M x N. Each row of the matrix indicates subscripts of an element in a N-D matrix.
Do you know how to convert the subscript matrix into a linear index vector without listing the subscripts of every dimension as in sub2ind function?
Thanks!

Respuesta aceptada

Bruno Luong
Bruno Luong el 10 de Ag. de 2020
Editada: Bruno Luong el 10 de Ag. de 2020
% Generate random array of nd-indexes
sz=[3 4 5 6];
m = 10;
n = length(sz);
SUBIDX=ceil(sz.*rand(m,n));
% Method 1, with sub2ind
LINIDX1 = zeros(m,1);
for k=1:size(SUBIDX,1)
subidxk = num2cell(SUBIDX(k,:));
LINIDX1(k) = sub2ind(sz,subidxk{:});
end
LINIDX1
% Method 2, not using sub2ind, NOTE: no error check for overflow
p = cumprod([1 sz(1:end-1)]);
LINIDX2 = (SUBIDX-1)*p(:)+1
% Method 3, for-loop on dimension
LINIDX3 = 0;
for k=n:-1:1
LINIDX3 = LINIDX3 * sz(k) + (SUBIDX(:,k)-1);
end
LINIDX3 = LINIDX3 + 1
  1 comentario
Soan Duong
Soan Duong el 10 de Ag. de 2020
Thanks, @Bruno Luong.
Your answers are awesome. That is exactly what I need.

Iniciar sesión para comentar.

Más respuestas (1)

Gaurav Garg
Gaurav Garg el 10 de Ag. de 2020
Editada: Gaurav Garg el 10 de Ag. de 2020
Hi Soan,
You can loop over all the rows, which indicate subscripts and run sub2ind function; and store the results in an array.
  2 comentarios
Soan Duong
Soan Duong el 10 de Ag. de 2020
Thanks, @Gaurav.
I did as your answer. Just wonderring whether there is any optimized method instead :).
Gaurav Garg
Gaurav Garg el 10 de Ag. de 2020
Soan,
Instead of using the ind2sub function, you can convert N-D array index to 1-D index. I would provide you with an example for N=2 -
For a 2-D array of dimensions M x N and an element A(i,j) in it-
A(i,j) = (j-1) * N + i
Since MATLAB stores data in column-major format, you would skip (j-1) columns resulting to (j-1)*N elements and ith element from here would be your resultant array.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by