Man*_*Man 4 python numpy scikit-learn
我有一个scipy.sparse.csr.csr_matrix
代表文档中的单词和列表列表,其中每个索引代表矩阵中每个索引的类别.
我遇到的问题是我需要从数据中随机选择N行.
所以,如果我的矩阵看起来像这样
[1:3 2:3 4:4]
[1:5 2:5 5:4]
Run Code Online (Sandbox Code Playgroud)
我的列表列表看起来像这样
((20,40) (80,50))
Run Code Online (Sandbox Code Playgroud)
我需要对1个值进行采样,我最终可以得到这个值
[1:3 2:3 4:4]
((20,40))
Run Code Online (Sandbox Code Playgroud)
我搜索了scipy文档,但我找不到使用索引列表生成新csr矩阵的方法.
您可以使用索引列表简单地索引csr矩阵.首先我们创建一个矩阵,然后看一下:
>>> m = csr_matrix([[0,0,1,0], [4,3,0,0], [3,0,0,8]])
<3x4 sparse matrix of type '<type 'numpy.int64'>'
with 5 stored elements in Compressed Sparse Row format>
>>> print m.toarray()
[[0 0 1 0]
[4 3 0 0]
[3 0 0 8]]
Run Code Online (Sandbox Code Playgroud)
当然,我们可以轻松地看到第一行:
>>> m[0]
<1x4 sparse matrix of type '<type 'numpy.int64'>'
with 1 stored elements in Compressed Sparse Row format>
>>> print m[0].toarray()
[[0 0 1 0]]
Run Code Online (Sandbox Code Playgroud)
但我们也可以使用列表[0,2]
作为索引一次查看第一行和第三行:
>>> m[[0,2]]
<2x4 sparse matrix of type '<type 'numpy.int64'>'
with 3 stored elements in Compressed Sparse Row format>
>>> print m[[0,2]].toarray()
[[0 0 1 0]
[3 0 0 8]]
Run Code Online (Sandbox Code Playgroud)
现在,您可以N
使用numpy 生成无重复(无替换)的随机索引choice
:
i = np.random.choice(np.arange(m.shape[0]), N, replace=False)
Run Code Online (Sandbox Code Playgroud)
然后你可以从原始矩阵中获取这些指数m
:
sub_m = m[i]
Run Code Online (Sandbox Code Playgroud)
要从列表的类别列表中获取它们,必须首先使它成为一个数组,然后您可以使用列表进行索引i
:
sub_c = np.asarray(categories)[i]
Run Code Online (Sandbox Code Playgroud)
如果你想要一个列表列表,只需使用:
sub_c.tolist()
Run Code Online (Sandbox Code Playgroud)
或者,如果你真正拥有/想要的是一个元组元组,我认为你必须手动完成:
tuple(map(tuple, sub_c))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2955 次 |
最近记录: |