将 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
,您可以使用 rankdata
和 method='dense'
(根据您问题的标签判断):
from scipy.stats import rankdata
rankdata(A, 'dense').reshape(A.shape)
array([[1, 5, 5],
[2, 3, 4]])
请注意,在您的情况下,method='min'
会获得相同的结果,有关详细信息,请参阅链接文档
我有一个 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
,您可以使用 rankdata
和 method='dense'
(根据您问题的标签判断):
from scipy.stats import rankdata
rankdata(A, 'dense').reshape(A.shape)
array([[1, 5, 5],
[2, 3, 4]])
请注意,在您的情况下,method='min'
会获得相同的结果,有关详细信息,请参阅链接文档