NumPy broadcasting
-
(a[:,None]==b).astype(int)
サンプル実行 -
In [107]: (a[:,None]==b)*1
Out[107]:
array([[1, 0, 0],
[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]])
-
In [104]: a
Out[104]: array([5, 5, 3, 4, 4, 4])
In [105]: b
Out[105]: array([5, 4, 3])
In [106]: (a[:,None]==b).astype(int)
Out[106]:
array([[1, 0, 0],
[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]])
場合は、最も簡単なことで、あなたがコンパクトな意味では、ここでは型変換を行うための改良一つです説明:None
はnumpy.newaxis
のエイリアスで、新しい軸(length=1
の軸)を追加するために使用されます。したがって、この場合、a[:,None]
で、の2D
バージョンが得られます。これには2D
バージョン、a.reshape(-1,1)
のいずれかを使用する方法があります。これによりを1D
b
と比較すると、一致する2D配列、ブール値配列が得られます。最後のステップはint
配列への変換です。
ステップ・バイ・ステップの実行 -
In [141]: a
Out[141]: array([5, 5, 3, 4, 4, 4])
In [142]: b
Out[142]: array([5, 4, 3])
In [143]: a[:,None]
Out[143]:
array([[5],
[5],
[3],
[4],
[4],
[4]])
In [144]: a[:,None] == b
Out[144]:
array([[ True, False, False],
[ True, False, False],
[False, False, True],
[False, True, False],
[False, True, False],
[False, True, False]], dtype=bool)
In [145]: (a[:,None] == b).astype(int)
Out[145]:
array([[1, 0, 0],
[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]])
ありがとうございました!これはまさに私が探していたものでした。 – David
'a [:、None]'は 'a.reshape(-1,1)'と同じように見えます。どのようにこれが正確に動作するか説明できますか? – David
@David投稿にコメントがほとんど追加されていません。彼らは願っています! – Divakar