1. ホーム
  2. python

[解決済み] Python で matlab ismember 関数

2022-02-14 01:20:18

質問

同じような質問が何度か出ていますが、いまだにmatlabのismember関数と同じような関数をPythonで作ることができません。特に、この関数をループで使用し、各反復で行列全体と別の行列の要素を比較したいのです。同じ値が発生する場合は 1 を、それ以外の場合は 0 を表示したいのです。

次のような行列があるとします。

d = np.reshape(np.array([ 2.25,  1.25,  1.5 ,  1.  ,  0.  ,  1.25,  1.75,  0.  ,  1.5 ,  0.  ]),(1,10))
d_unique = np.unique(d)

であれば、私は

d_unique
array([ 0.  ,  1.  ,  1.25,  1.5 ,  1.75,  2.25])

では、次のような反復処理を行いたい。

J = np.zeros(np.size(d_unique))
for i in xrange(len(d_unique)):
        J[i] = np.sum(ismember(d,d_unique[i]))

を出力として受け取るようにします。

J = [3,1,2,2,1,1]

どなたかお分かりになる方はいらっしゃいますか?よろしくお願いします。

解決方法は?

以下の関数を試してみてください。

def ismember(A, B):
    return [ np.sum(a == B) for a in A ]

これは、対応するMALTAB関数と非常によく似た動作をするはずです。