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

Rescaling 2D numpy array as Dense representation

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

例如

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

会变成

[ [1,5,5],[2,3,4] ]

使用 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]])

如果您不反对使用 scipy,您可以使用 rankdatamethod='dense'(根据您问题的标签判断):

from scipy.stats import rankdata

rankdata(A, 'dense').reshape(A.shape)

array([[1, 5, 5],
       [2, 3, 4]])

请注意,在您的情况下,method='min' 会获得相同的结果,有关详细信息,请参阅链接文档