조회 수: 4,462 (최근 30일)
이전 댓글 표시
Mykhailo Yaroshenko 2017년 11월 8일
편집: MathWorks Support Team 대략 6시간 전
채택된 답변: James Tursa
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?
댓글 수: 0 이전 댓글 -2개 표시이전 댓글 -2개 숨기기
이전 댓글 -2개 표시이전 댓글 -2개 숨기기
댓글을 달려면 로그인하십시오.
이 질문에 답변하려면 로그인하십시오.
채택된 답변
James Tursa 2024년 5월 15일 0:00
편집: MathWorks Support Team 대략 4시간 전
To find the index of a specific integer value (without roundoff error) in an array of integers, use the "find" functionand == 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 이전 댓글 5개 표시이전 댓글 5개 숨기기
이전 댓글 5개 표시이전 댓글 5개 숨기기
Stephen23 2017년 11월 9일
이 댓글에 대한 바로 가기 링크
https://kr.mathworks.com/matlabcentral/answers/365917-how-can-i-find-index-of-element-in-array#comment_502775
MATLAB Online에서 열기
Often logical indexing is more efficient, so you might only need this:
idx = X==5;
Scott MacKenzie 2021년 4월 18일
이 댓글에 대한 바로 가기 링크
https://kr.mathworks.com/matlabcentral/answers/365917-how-can-i-find-index-of-element-in-array#comment_1467076
편집: Scott MacKenzie 2021년 4월 18일
MATLAB Online에서 열기
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
Walter Roberson 2021년 9월 11일
이 댓글에 대한 바로 가기 링크
https://kr.mathworks.com/matlabcentral/answers/365917-how-can-i-find-index-of-element-in-array#comment_1731234
Henrik Wassertheurer comments to James Tursa
Doesn't answer the question
Image Analyst 2021년 9월 11일
이 댓글에 대한 바로 가기 링크
https://kr.mathworks.com/matlabcentral/answers/365917-how-can-i-find-index-of-element-in-array#comment_1731259
Henrik, yes it does, as I understand the question. Why do you say it doesn't?
Walter Roberson 2021년 9월 11일
이 댓글에 대한 바로 가기 링크
https://kr.mathworks.com/matlabcentral/answers/365917-how-can-i-find-index-of-element-in-array#comment_1731264
MATLAB Online에서 열기
@Henrik Wassertheurer
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 2021년 10월 2일
이 댓글에 대한 바로 가기 링크
https://kr.mathworks.com/matlabcentral/answers/365917-how-can-i-find-index-of-element-in-array#comment_1764809
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 2023년 6월 29일
이 댓글에 대한 바로 가기 링크
https://kr.mathworks.com/matlabcentral/answers/365917-how-can-i-find-index-of-element-in-array#comment_2799898
MATLAB Online에서 열기
@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]}
댓글을 달려면 로그인하십시오.
추가 답변 (0개)
이 질문에 답변하려면 로그인하십시오.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom(English)
아시아 태평양
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)
지역별 지사에 문의