まず、float を int に安全に丸めることから始めます。コンテキストでは、この質問を参照してください。
a_indices = np.rint(a * 100).astype(int)
次に、これらのインデックスを 1 に割り当てます。ただし、配列の代わりにb
通常のものを使用するように注意してください。そうしないと、インデックス配列の使用がトリガーされます。この方法のパフォーマンスは、代替手段のパフォーマンスに匹敵するようです (@Divakar に感謝! :-)list
b[list(a_indices.T)] = 1
説明するために、サイズが 100 ではなく 10 で、3 ではなく 2 次元の小さな例を作成しました。
>>> a = np.array([[0.8, 0.2], [0.6, 0.4], [0.5, 0.6]])
>>> a_indices = np.rint(a * 10).astype(int)
>>> b = np.zeros((10, 10))
>>> b[list(a_indices.T)] = 1
>>> print(b)
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]