2017-01-22 2 views
-1

В моей программе я пытаюсь получить 10 лучших элементов массива с их индексами. Тип массива - ndarray.Как использовать numpy.sort для ndarray

for a in arr: 
    print(a) 

(0, 112354) 0.11235445 
(0, 875) 0.155235445 
(0, 6135) -0.14445445 
... 

Я пытаюсь использовать numpy.sort для этого и передать массив в качестве параметра, но это не дает нужного результата.

Как получить 10 лучших элементов массива и их индексы?

ОБНОВЛЕНО

pprint(arr) выход

<1x28382 sparse matrix of type '<class 'numpy.float64'>' 
    with 18404 stored elements in Compressed Sparse Row format> 

print(arr) возвращается:

(0, 11098) 0.113315317878 
    (0, 6775) 0.0513432082411 
    (0, 5107) 0.0544519626112 
    (0, 98) 0.059766413309 
    (0, 27042) 0.104718642966 
    (0, 22622) 0.104718642966 
    (0, 6135) 0.104718642966 

На самом деле arr является sklearn.svm.SVC.coef_ объектом.

Благодарим за помощь.

+0

Можете ли вы предоставить (a) ваш код, (b) пример ввода и то, что вы * хотите * получить, (c) пример ввода и то, что вы * на самом деле получаете? – Tagc

+0

Пожалуйста, включите pprint вашего массива и на какой оси вы хотите отсортировать –

+0

распечатайте полезную информацию. можете ли вы дать результат arr [: 2], чтобы понять структуру? на что вы хотите сортировать? –

ответ

0

Поскольку это разреженная матрица, более эффективно работать с a.data.

Простой пример:

from numpy import * 
import scipy 
a=zeros(12,int) 
a[:6]=range(6) 
shuffle(a) 
a=scipy.sparse.csr_matrix(a.reshape(4,3)) 
print(a.toarray());print(a) 

# a is 
[[4 0 1] 
[3 0 5] 
[2 0 0] 
[0 0 0]] 

# or in csr format 
(0, 1) 5.0 
(0, 2) 3.0 
(1, 2) 2.0 
(3, 0) 1.0 
(3, 1) 4.0 

Затем найдите п большие значения, а строка и Col связаны индексы:

n=3 # the three biggest 
bigs=a.data.argsort()[:-n-1:-1] 
r,c=a.nonzero() 
R,C=r[bigs],c[bigs] 
print("the 3 biggest are in ",*zip(R,C)) 

, что дает:

the 3 biggest are in (0, 1) (3, 1) (0, 2) 
+0

Извините, это не помогло. Обновлен вопрос. – StuffHappens

Смежные вопросы