1

私の目的は、1 つのリストでいくつか (この例では =3) の最大値を見つけ、fourireリスト内の位置を特定し、他のリストで対応する (position_wise) 値を取得することですfreq。したがって、出力は次のようになります。

2. 27.
9. 25.
4. 22.

添付の python は正常に動作しています。

**私はnumpy配列を扱っているので、index()が機能していないことに注意してください....

以下を改善する方法はありますか?

import heapq

freq    = [  2., 8., 1., 6., 9., 3.,  6., 9.,   4., 8., 12.]
fourire = [ 27., 3., 2., 7., 4., 9., 10., 25., 22., 5.,  3.]

out = heapq.nlargest(3, enumerate(fourire), key=lambda x:x[1])

elem_fourire = []
elem_freq = []
for i in range(len(out)):
    (key, value) = out[i]
    elem_freq.extend([freq[key]])
    elem_fourire.extend([value])

for i in range(len(out)):  
    print elem_freq[i], elem_fourire[i]
4

1 に答える 1

1
import numpy as np

fourire = np.array(fourire)
freq = np.array(freq)

ix = fourire.argsort(kind='heapsort')[-3:][::-1]

for a, b in zip(freq[ix],fourire[ix]):
    print a, b

版画

2.0 27.0
9.0 25.0
4.0 22.0

numpyの代わりにheapqを使用する場合は、上記のコードを少し変更すると、次のようになります。

ix = heapq.nlargest(3,range(len(freq)),key=lambda x: fourire[x])
for x in ix:
    print freq[x], fourire[x]

同じ出力になります

于 2013-04-17T21:23:16.737 に答える