コロン関数でインクリメントした数列から,一致する要素の検索の仕方がわかりません
Show older comments
基礎的な問題なのかもしれませんが,よろしくお願いします.
私は二つの数値配列の中で,一致するインデックスを求めたいのですが,intersect関数を使用すると検知できない数値があります. 以下のコードの場合は,Aと一致する数値をBから20個見つけ出せます.
A=[0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 1.025 1.075 1.125 1.175 1.225 1.275 1.325 1.375];
B=[0.3 0.325 0.35 0.375 0.4 0.425 0.45 0.475 0.5 0.525 0.55 0.575 0.6 0.625 0.65 0.675 0.7 0.725 0.75 0.775 0.8 0.825 0.85 0.875 0.9 0.925 0.95 0.975 1 1.025 1.05 1.075 1.1 1.125 1.15 1.175 1.2 1.225 1.25 1.275 1.3 1.325 1.35 1.375 1.4 1.425];
[G,ia,ib] = intersect(A,B,'stable')
しかし,以下のようなコロン演算子を使用したインクリメントでの配列を作成したものをintersect関数に使用すると,ほとんどは見つけることができますが,見つからないものが出てきます.
C=0.425:0.05:1.375;
D=0.3:0.025:2;
[GG,ic,id] = intersect(C,D,'stable')
上記の場合は,Dの中のCと一致するものを見つけ出したいのですが, icに20個の分のインデックスが返ってくるはずが17個しか見つかりません. C及びDには同じ数値が入っていることは確認済みです.
ismemberやfind関数でも同様になってしまいます. この問題の回避方法はないでしょうか? 宜しくお願い致します。


Accepted Answer
More Answers (1)
Hirokazu Tanaka
on 3 Oct 2018
Yoshioさんのおっしゃる通りです。
R2015aから使える関数ですが、誤算の許容範囲を設定できる関数 ismembertol が便利かと。
C=0.425:0.05:1.375;
D=0.3:0.025:2;
ismembertol(C,D)
と実行すると
ans =
1×20 の logical 配列
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
20個の分のインデックスが返ってきます。
詳細はこちら:
調べていたら、unique にも同様の関数がありました。
Categories
Find more on 集合演算 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!