如何使用numpy.排序对于ndarray

2024-04-24 07:35:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的程序中,我尝试用索引获取前10个数组项。数组的类型是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

实际上arrsklearn.svm.SVC.coef_对象。你知道吗

谢谢你的帮助。你知道吗


Tags: ofin程序numpy类型fortype数组
1条回答
网友
1楼 · 发布于 2024-04-24 07:35:20

因为这是一个稀疏矩阵,所以处理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

然后找到n个最大值,以及行和列关联的索引:

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)

相关问题 更多 >