我使用稀疏矩阵作为压缩数据的方法,当然失去了,我所做的是从所有大于指定阈值的值创建稀疏字典。我希望我的压缩数据大小是我的用户可以选择的变量。
我的问题是,我有一个稀疏矩阵,有很多接近零的值,我必须做的是选择一个阈值,以便我的稀疏字典具有特定的大小(或最终重建错误是特定的率) 以下是我创建字典的方法(取自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个最大值?
答案 0 :(得分:2)
scipy.stats.scoreatpercentile(arr,per)
返回给定百分位数的值:
import scipy.stats as ss
print(ss.scoreatpercentile([1, 4, 2, 3], 75))
# 3.25
如果所需的百分位数位于arr
中的两个点之间,则插值。
因此,如果您设置per=(len(smat)-n)/len(smat)
,那么
threshold = ss.scoreatpercentile(abs(smat), per)
应该给你(接近)数组smat的第n个最大值。