私はndarrayを持っています。この配列から、最大値を持つN個の数値のリストを選択する必要があります。heapq.nlargest
N個の最大のエントリが見つかりましたが、インデックスを抽出する必要があります。最初の列の重みが最大のN行のみが存続する新しい配列を作成したいと思います。残りの行はランダムな値に置き換えられます
import numpy as np
import heapq # For choosing list of max values
a = [[1.1,2.1,3.1], [2.1,3.1,4.1], [5.1,0.1,7.1],[0.1,1.1,1.1],[4.1,3.1,9.1]]
a = np.asarray(a)
maxVal = heapq.nlargest(2,a[:,0])
if __name__ == '__main__':
print a
print maxVal
私が持っている出力は次のとおりです。
[[ 1.1 2.1 3.1]
[ 2.1 3.1 4.1]
[ 5.1 0.1 7.1]
[ 0.1 1.1 1.1]
[ 4.1 3.1 9.1]]
[5.0999999999999996, 4.0999999999999996]
しかし、私が必要と[2,4]
しているのは、新しい配列を構築するためのインデックスとしてです。インデックスは行であるため、この例で残りを0に置き換えたい場合は、次のように終了する必要があります。
[[0.0 0.0 0.0]
[ 0.0 0.0 0.0]
[ 5.1 0.1 7.1]
[ 0.0 0.0 0.0]
[ 4.1 3.1 9.1]]
インデックスが必要なところに行き詰まっています。元の配列には1000行と100列があります。重みは正規化された浮動小数点であり、重みが非常に近く、元のNよりもif a[:,1] == maxVal[0]:
多くの値で終了することがあるため、このようなことはしたくありません。maxVal[0]
このセットアップでインデックスを抽出して、配列の残りの部分を置き換える簡単な方法はありますか?