Изменение масштаба двумерного массива в виде плотного представления - PullRequest
0 голосов
/ 07 июня 2018

У меня есть массив Numpy.Я хочу изменить масштаб элементов в массиве, чтобы наименьшее число в массиве было представлено 1, а наибольшее число в массиве представлено количеством уникальных элементов в массиве.

Например,

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

станет

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

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Если вы не против использования scipy, вы можете использовать rankdata с method='dense' (судя по тегам на ваш вопрос):

from scipy.stats import rankdata

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

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

Обратите внимание, что в вашем случае method='min' даст те же результаты, для получения более подробной информации см. Связанную документацию

0 голосов
/ 07 июня 2018

Используйте 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]])
...