コロン関数でインクリメントした数列から,一致する要素の検索の仕方がわかりません
Afficher commentaires plus anciens
基礎的な問題なのかもしれませんが,よろしくお願いします.
私は二つの数値配列の中で,一致するインデックスを求めたいのですが,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関数でも同様になってしまいます. この問題の回避方法はないでしょうか? 宜しくお願い致します。


Réponse acceptée
Plus de réponses (1)
Hirokazu Tanaka
le 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 にも同様の関数がありました。
Catégories
En savoir plus sur 集合演算 dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!