find() not as expected

3 ビュー (過去 30 日間)
Mike D.
Mike D. 2019 年 7 月 13 日
コメント済み: Star Strider 2019 年 7 月 13 日
I have a numeric 2D array called A with time in the first column (from zero to 2 minutes every 0.01 seconds). I want to find the rows that match times = 10 : 10 : 100;
When I type find(10==A(:,1), I get 1001
When I type find(20==A(:,1), I get 2001
Why when I type find(times==A(:,1) does it give these values: [1001, 12957, 24913, 36869, ...]?
These values of times (which are 10, 20, 30, ...) are at rows [1001, 2001, 3001, 4001, ...], so that's what I expected.
I know I don't really need a find() in most situations because I can use indexing, but that doesn't work either:
plot(A(A(:,1)==times,3),A(A(:,1)==times,2),'rs')
gives error msg: The logical indices in position 1 contain a true value outside of the array bounds.
because A(:,1)==times gives value of 12957 for the second index which is outside of array A bounds.
  2 件のコメント
madhan ravi
madhan ravi 2019 年 7 月 13 日
size(times) % what does these show?
size(A)
Upload your datas as .mat file
Image Analyst
Image Analyst 2019 年 7 月 13 日
Are they integers or floating point?
See the FAQ for how to test for equality with doubles.

サインインしてコメントする。

採用された回答

Star Strider
Star Strider 2019 年 7 月 13 日
You have encountered ‘automatic implicit expansion’ introduced in R2016b. The result you get from your equality expressions will be an (Nx10) array, where ‘N’ is the row size of ‘A’ (720001 in my reconstruction here) and 10 is the size of ‘times’.
The only way to get the result you want are either to compare each value of ‘times’ in a loop, or more efficiently to use the accumarray function.
Try this:
A = [0:0.01:7200; rand(size(0:0.01:7200))]'; % Create Matrix
times = 10:10:100; % Create Vector
Out = accumarray((1:numel(times))', times, [], @(x){A(A(:,1)==x,:)})
Reveal = cell2mat(Out)
With my random matrix, this gave the correct results, when I checked them against the actual rows of ‘A’.
You can then plot them as:
figure
plot(Reveal(:,1), Reveal(:,2),'rs')
grid
I named the double matrix ‘Reveal’ to explain what it is. Name it anything you want.
  6 件のコメント
Mike D.
Mike D. 2019 年 7 月 13 日
ok, thanks, I just wanted to identify which rows in A that match "times" so that I can plot only those rows in A. I see I have three options now.
Star Strider
Star Strider 2019 年 7 月 13 日
My pleasure.
If my Answer helped you solve your problem, please Accept it!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

タグ

製品


リリース

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by