2

データを圧縮する手段として疎行列を使用していますが、もちろん損失があります。指定されたしきい値を超えるすべての値から疎な辞書を作成することです。圧縮データのサイズを、ユーザーが選択できる変数にしたいと思います。

私の問題は、ゼロに近い値がたくさんあるスパース行列があり、スパース辞書が特定のサイズになるように (または最終的に再構築エラーが特定の割合になるように) しきい値を選択することです。辞書の作成方法(stackoverflowから取得したと思います >.< ):

n = abs(smat) > treshold #smat is flattened(1D)
i = mega_range[n] #mega range is numpy.arange(smat.shape[0])
v = smat[n]
sparse_dict = dict(izip(i,v))

配列 (smat) の n 番目に大きい値と等しくなるようにしきい値を見つけるにはどうすればよいですか?

4

1 に答える 1

2

scipy.stats.scoreatpercentile(arr,per)指定されたパーセンタイルで値を返します。

import scipy.stats as ss
print(ss.scoreatpercentile([1, 4, 2, 3], 75))
# 3.25

目的のパーセンタイルが の 2 点間にある場合、値は補間されarrます。

したがって、設定per=(len(smat)-n)/len(smat)した場合

threshold = ss.scoreatpercentile(abs(smat), per)

配列 smat の n 番目に大きい値 (に近い) を与える必要があります。

于 2010-07-07T15:06:24.160 に答える