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

如果所需的百分位数位于 中的两点之间,则会对该值进行插值arr

所以如果你设置per=(len(smat)-n)/len(smat)然后

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

应该给你(接近)数组smat的第n个最大值。

于 2010-07-07T15:06:24.160 回答