将2D numpy数组重新缩放为Dense表示

时间:2018-06-07 19:38:36

标签: python numpy dense-rank rescale

我有一个numpy数组。我想重新缩放数组中的元素,以便数组中的最小数字由1表示,数组中的最大数字由数组中唯一元素的数量表示。

例如

n

会变成

A=[ [2,8,8],[3,4,5] ]  

2 个答案:

答案 0 :(得分:3)

使用np.unique及其return_inverse参数 -

np.unique(A, return_inverse=1)[1].reshape(A.shape)+1

示例运行 -

In [10]: A
Out[10]: 
array([[2, 8, 8],
       [3, 4, 5]])

In [11]: np.unique(A, return_inverse=1)[1].reshape(A.shape)+1
Out[11]: 
array([[1, 5, 5],
       [2, 3, 4]])

答案 1 :(得分:1)

如果您不反对使用array_intersect_key($items, $array); // array( 0 => 'bananas' ); ,则可以使用herescipy(根据您的问题标记判断):

method='dense'

请注意,在您的情况下,from scipy.stats import rankdata rankdata(A, 'dense').reshape(A.shape) array([[1, 5, 5], [2, 3, 4]]) 会获得相同的结果,请参阅链接文档以获取更多详细信息