我有一个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矩阵的方法.
我有一个非常大(长度约1.5亿)的numpy数组,其非零值非常少(约99.9%的数组为0).我想要洗牌,但是洗牌很慢(大约需要10秒,这是不可接受的,因为我正在进行蒙特卡罗模拟).有没有办法以考虑到我的数组主要由0组成的事实来改变它?
我正在考虑改变我的正值,然后将它随机插入一个完整的数组0,但我找不到一个numpy函数.
我的代码如下所示:
from sklearn.datasets import load_svmlight_files
import numpy as np
perm1 =np.random.permutation(25000)
perm2 = np.random.permutation(25000)
X_tr, y_tr, X_te, y_te = load_svmlight_files(("dir/file.feat", "dir/file.feat"))
#randomly shuffle data
X_train = X_tr[perm1,:].toarray()[:,0:2000]
y_train = y_tr[perm1]>5 #turn into binary problem
Run Code Online (Sandbox Code Playgroud)
代码工作正常,直到这里,但当我尝试将另一个对象转换为数组时,我的程序返回内存错误.
码:
X_test = X_te[perm2,:].toarray()[:,0:2000]
Run Code Online (Sandbox Code Playgroud)
错误:
---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
<ipython-input-7-31f5e4f6b00c> in <module>()
----> 1 X_test = X_test.toarray()
C:\Users\Asq\AppData\Local\Enthought\Canopy\User\lib\site-packages\scipy\sparse\compressed.pyc in toarray(self, order, out)
788 def toarray(self, order=None, out=None):
789 """See the docstring for `spmatrix.toarray`."""
--> 790 return self.tocoo(copy=False).toarray(order=order, out=out)
791
792 ##############################################################
C:\Users\Asq\AppData\Local\Enthought\Canopy\User\lib\site-packages\scipy\sparse\coo.pyc …Run Code Online (Sandbox Code Playgroud)