How can I find index of element in array?

5.085 visualizaciones (últimos 30 días)
Mykhailo Yaroshenko
Mykhailo Yaroshenko el 8 de Nov. de 2017
Respondida: RONG el 4 de Ag. de 2024
I know that I have a number 5 as an element in array X, but I do not know its index. Does MATLAB have a built-in function similar to Python's "index" method for finding the index of an element in an array?

Respuesta aceptada

James Tursa
James Tursa el 4 de Sept. de 2024
Editada: MathWorks Support Team el 5 de Jun. de 2024
To find the index of a specific integer value (without roundoff error) in an array of integers, use the "find" function and == operator. For example, find the index of an element equal to 5 in a 1-by-11 vector of integers. 
x = 0:1:10; k = find(x==5)
To find a numeric value in an array of floating-point numbers, use a tolerance value based on your data. Otherwise, the result is sometimes an empty matrix due to floating-point roundoff errors. For example, find the index of an element equal to 0.5 within a roundoff error of 1e-6. 
y = 0:0.1:1; k = find(abs(y-0.5) < 1e-6)
  7 comentarios
Ehsan Partovi
Ehsan Partovi el 2 de Oct. de 2021
The function find() is useful as far as matrices (2-D tensors) are concerned. I cannot, however, find a useful function for nd-arrays where, for instance, the index could be an array on its own. See example below:
M = reshape(1:24, [2,3,4]);
indices = index_finder(M==20); % indices = vector of indices
It would be very useful if there was a function which worked for tensors of any dimensionality.
Jesse Ivers
Jesse Ivers el 29 de Jun. de 2023
@Ehsan Partovi I couldn't agree with you more; this is a problem I seem to run into often, and here is my solution:
% Example ND-array
arr = reshape([1:6000], [5 5 10 4 6]);
numberOfInterest = 99;
% Get the linear index of the
linearIndex = find(arr==numberOfInterest);
% Convert linear index to subscript
[row, col, depth, channel, time] = ind2sub(size(arr), linearIndex)
row = 4
col = 5
depth = 4
channel = 1
time = 1
The only drawbacks are the reuirement that you know how many dimensions. YOu can get around this with CSLs like so:
% Use CSL to get all the outputs
[idicies{1:ndims(arr)}] = ind2sub(size(arr), linearIndex)
idicies = 1×5 cell array
{[4]} {[5]} {[4]} {[1]} {[1]}

Iniciar sesión para comentar.

Más respuestas (2)

RONG
RONG el 4 de Ag. de 2024
% Suppose X is your array
X = [3, 5, 7, 5, 9];
% Find the index of the element 5
index = find(X == 5);

RONG
RONG el 4 de Ag. de 2024
firstIndex = find(X == 5, 1);

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by