поиск в python и поиск нужного номера в массиве 2d - PullRequest
0 голосов
/ 30 марта 2019

у меня есть массив np.array двумерный массив

[[8, 12, 5, 2], [12,15, 6,10], [15, 8, 12, 5], [12,15,8,6]]

я хочу создать еще один 2d массив , (каждое число в массиве, сколько повторений, мест)

(2,1,[1,4]), (5,2,[1,3],[3,4]) ,(6,2,[2,3],[4,4]) , (8,3,[1,1],[3,1],[4,3]) (12,4,[1,2],[2,1],[3,3],[4,1]) ,(15,3,[2,2],[3,1],[4,2])
I'd like to generate comparisons between rows and columns.

объяснить (давайте возьмем № 15 в качестве примера)

повторил: 3

расположение: [2,2], [3,1], [4,2]

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Вот один из способов использования np.unqiue и np.where, обратите внимание, что индекс в numpy array начинается с 0, а не 1

x,y=np.unique(a.ravel(), return_counts=True)
l=[]
for v,c in zip(x,y):
    l.append((v,c,np.column_stack(np.where(a==v)).tolist()))


l
Out[344]: 
[(2, 1, [[0, 3]]),
 (5, 2, [[0, 2], [2, 3]]),
 (6, 2, [[1, 2], [3, 3]]),
 (8, 3, [[0, 0], [2, 1], [3, 2]]),
 (10, 1, [[1, 3]]),
 (12, 4, [[0, 1], [1, 0], [2, 2], [3, 0]]),
 (15, 3, [[1, 1], [2, 0], [3, 1]])]
0 голосов
/ 30 марта 2019

Использование кода из этого поста Самый эффективный способ сортировки массива по бинам, заданным индексным массивом? в качестве модуля stb мы можем сделать

import numpy as  np
from stb import sort_to_bins_sparse as sort_to_bins
from pprint import pprint

X = np.array([[8, 12, 5, 2], [12,15, 6,10], [15, 8, 12, 5], [12,15,8,6]])

unq, inv, cnt = np.unique(X, return_inverse=True, return_counts=True)
sidx = sort_to_bins(inv, np.arange(X.size))
# or (slower but avoids dependency on stb module)
# sidx = np.argsort(inv, kind='stable')

pprint(list(zip(unq, cnt, np.split(np.transpose(np.unravel_index(sidx, X.shape)) + 1, cnt[:-1].cumsum()))))[(2, 1, array([[1, 4]])),
#  (5, 2, array([[1, 3],
#        [3, 4]])),
#  (6, 2, array([[2, 3],
#        [4, 4]])),
#  (8, 3, array([[1, 1],
#        [3, 2],
#        [4, 3]])),
#  (10, 1, array([[2, 4]])),
#  (12, 4, array([[1, 2],
#        [2, 1],
#        [3, 3],
#        [4, 1]])),
#  (15, 3, array([[2, 2],
#        [3, 1],
#        [4, 2]]))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...