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?

 채택된 답변

James Tursa
James Tursa 2024년 9월 4일
편집: MathWorks Support Team 2024년 6월 5일

33 개 추천

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

Often logical indexing is more efficient, so you might only need this:
idx = X==5;
Scott MacKenzie
Scott MacKenzie 2021년 4월 18일
편집: Scott MacKenzie 2021년 4월 18일
Bear in mind that if the number occurs more than once in the vector, the result returned is a vector containing the indices of all occurrences. If you want the index of just the first occurrence of the number, insert 1 as the second argument in find:
>> x = [3 4 5 6 4 8]
x =
3 4 5 6 4 8
>> result = find(x==4)
result =
2 5
>> result = find(x==4, 1)
result =
2
Henrik Wassertheurer comments to James Tursa
Doesn't answer the question
Image Analyst
Image Analyst 2021년 9월 11일
Henrik, yes it does, as I understand the question. Why do you say it doesn't?
What difficulty do you find with James' answer? He showed the find() function, which is the function defined to locate the places where a condition occurs.
If you need to have the exact question answered more clearly, "but did Matlab doesn't have build-in similar function?" then the answer to that is "NO, MATLAB does not have a built-in function in which you can provide only the array name and the value, and MATLAB will return all the indices of the value in the array."
Note: if you only need to know the first location, then you can also use
[~, result] = ismember(5, x)
result will be 0 if 5 is not present in x.
Ehsan Partovi
Ehsan Partovi 2021년 10월 2일
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.
@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]}

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

RONG
RONG 2024년 8월 4일

0 개 추천

% Suppose X is your array
X = [3, 5, 7, 5, 9];
% Find the index of the element 5
index = find(X == 5);
RONG
RONG 2024년 8월 4일

0 개 추천

firstIndex = find(X == 5, 1);

카테고리

도움말 센터File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

제품

릴리스

R2024a

태그

질문:

2017년 11월 8일

답변:

2024년 8월 4일

Community Treasure Hunt

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

Start Hunting!

Translated by