私はPythonに詳しくはありませんが、私は何かする必要があります。私はいくつかの列のASCIIファイル(スペース区切り)を持っています。最初の列では、いくつかの値が重複しています。これらの重複値から、例えば第3列で大きな値を持つ行を選択し、配列を戻す必要があります。 私はこのような何か希望:私はpython列の最大値に基づいて行を選択してください
(全ての第2のエントリ)重複のインデックスを検出するための補助機能を定義した:#col1 col2 col3 col4 col5
1 1 2 3 4
1 2 1 5 3
2 2 5 2 1
ライン1と3 を返しますが、ここで私はこれまでにしたものです
def list_duplicates(seq):
seen = set()
seen_add = seen.add
return [idx for idx,item in enumerate(seq) if item in seen or seen_add(item)]
し、リストを読むためにそれを使用してみてください(私は、各列に名前を付けるnp.genfromtxt持つファイルからロードされていること)
def select_high(ndarray, dup_col, sel_col): #dup_col is the column where the duplicates are, sel_col is the column where we select the larger value
result = []
dup = list_duplicates(ndarray[dup_col])
dupdup = [x-1 for x in dup]
for i in range(len(ndarray[sel_col])):
if i in dup:
mid = []
maxi = max(ndarray[sel_col][i], ndarray[sel_col][i-1])
maxi_index = np.where(ndarray[sel_col] == maxi)[0][0]
for name in ndarray.dtype.names:
mid.append(ndarray[name][maxi_index])
result.append(mid)
else:
mid = []
if i not in dupdup:
for name in ndarray.dtype.names:
mid.append(ndarray[name][i])
result.append(mid)
return np.asarray(result)
が、何が起こっているのかは重複があるときはいつでもelse
の部分を削除しなければならない、それとも私にエラーが出る、重複がないときはいつでも戻す必要があるということです。 何か助けていただければ幸いです。長い投稿を申し訳ありません。私は自分自身を明確にすることを願っています。
を 'col3'に、我々はこれらのアイテムを持つことになります場合、結果は何をする必要があります:' 1,2,3,2,1,4を、 5?それはmin要素より大きいすべての項目でなければなりませんか? – AndMar
あなたの質問に表示されているエラーを追加できますか?デバッグがはるかに簡単になります。 – mfitzp